Java:为什么我不能在main之外调用这个方法?

时间:2014-07-10 21:36:25

标签: java object methods main

作为一个初学者,我想知道为什么我的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);
  }
}

3 个答案:

答案 0 :(得分:11)

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

VelocityCounter caller = new VelocityCounter();

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

caller.VelocityC(6, 3);

在类声明的最高级别是非法的。

* 从技术上讲,这不太对劲。语句也可以出现在构造函数,static块和实例初始化程序块中。

答案 1 :(得分:2)

那是因为方法或构造函数之外的代码只是声明性的。你不能在方法或构造函数之外放置赋值或方法调用之类的语句。

答案 2 :(得分:2)

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

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