Java:为啥我不能在 main 之外调用这个方法? [关闭]

Posted

技术标签:

【中文标题】Java:为啥我不能在 main 之外调用这个方法? [关闭]【英文标题】:Java: Why can't I call this method outside of main? [closed]Java:为什么我不能在 main 之外调用这个方法? [关闭] 【发布时间】:2014-09-01 10:18:05 【问题描述】:

作为一个初学者,我想知道为什么我的caller.VelocityC 只在放在主块内时才有效?

当我有这样的代码时,我无法调用该方法。

方法调用类:

public class Velocity2 

VelocityCounter caller = new VelocityCounter();
caller.VelocityC(6, 3);

包含该方法的类:

public class VelocityCounter   
void VelocityC(int s, int v)
    System.out.print(s/v);
  

【问题讨论】:

【参考方案1】:

在 Java 中,不能有不属于方法的可执行语句。* 第一行没问题:

VelocityCounter caller = new VelocityCounter();

因为编译器认为您正在为类Velocity2 声明和初始化一个名为caller 的实例变量。但是,第二行:

caller.VelocityC(6, 3);

在类声明的顶层是非法的。

*从技术上讲,这并不完全正确。语句也可以出现在构造函数、static 块和实例初始化块中。

【讨论】:

+1 获得更多描述性和信息性的答案。【参考方案2】:

这是因为方法或构造函数之外的代码只是声明性的。您不能将诸如赋值或方法调用之类的语句放在方法或构造函数之外。

【讨论】:

其实可以:public class Test int v = 5; v += 2; @Andrew_CS 构造函数不被视为方法吗? @Jashaszun 不,他们不是 @JamesB 有什么区别,除了构造函数不返回任何东西?构造函数类似于返回 void 的方法。 ***.com/questions/19061599/…【参考方案3】:

源文件的那个区域是您可以声明类的字段或实例的字段的地方,但是如果您仍然真的想调用caller.VelocityC(6, 3);,那么您可以使用如下的实例初始化块:

public class Velocity2 

    VelocityCounter caller = new VelocityCounter();
    
        caller.VelocityC(6, 3);
    

caller.VelocityC(6, 3); 将在 Velocity2 的每个构造过程中执行,就像 VelocityCounter 构造函数的执行和对调用者的赋值一样。

http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

【讨论】:

只有在构造Velocity2 的实例时才会执行。并且每次构建时都会执行,这可能不是 OP 想要的。 我假设 OP 知道它每次都会执行,因为他/她知道调用者的构造也会发生在每个 Velocity2 构造中,但我可以编辑该信息。

以上是关于Java:为啥我不能在 main 之外调用这个方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 main 方法中调用私有变量?

Javafx怎么播放flash,就是我用Java main函数执行,直接调用Javafx做好的页面,为啥不能播放flash

为啥 Java 程序需要“main()”方法?

java中为啥要把main方法定义为一个static方法

为啥不能从另一种方法调用main方法[关闭]

为啥我不能在主类中创建除主方法之外的另一个方法?