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 之外调用这个方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Javafx怎么播放flash,就是我用Java main函数执行,直接调用Javafx做好的页面,为啥不能播放flash