为什么必须在静态初始化程序块中调用静态方法(如果在类定义中调用),除非您将输出分配给变量。
public class MyClass {
int a = staticFunction(); // Allowed.
static int b = staticFunction(); // Allowed.
staticFunction(); // Not allowed!
static {
staticFunction(); // Allowed.
}
private static int staticFunction() {
return 1;
}
}
我猜这是因为JVM不知道在加载类时,或者每次创建对象时是否应该调用此方法。
答案 0 :(得分:2)
不必在静态初始化程序块中调用它;它也可以在实例初始化程序中调用,它看起来就像一个静态初始化程序块但没有单词static
:
public class MyClass {
staticFunction(); // Not allowed!
{
staticFunction(); // Allowed.
}
private static int staticFunction() {
return 1;
}
}
每次创建新的MyClass
对象时都会调用实例初始值设定项。 (如果你在构造函数中放置类似的东西通常会更清楚,它具有大致相同的效果。但是实例初始化器对于无法编写自己的构造函数的匿名类很有用。)
答案 1 :(得分:0)
这是因为JVM不知道在加载(静态)类时,或者每次创建对象时(每个实例)都应该调用一次此方法。
因此,调用此静态方法必须在初始化程序中完成,无论是静态初始化程序还是实例初始化程序。