Java:为什么我不能在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); } } 

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

 VelocityCounter caller = new VelocityCounter(); 

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

 caller.VelocityC(6, 3); 

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

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

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

源文件的那个区域是您可以声明实例的类或字段的字段的地方,但是如果您仍然真的想要调用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