为什么必须在静态初始化程序块中调用静态方法(如果在类定义中调用了该方法),除非将输出分配给变量。
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不知道在加载类时还是在每次创建对象时是否应调用此方法一次。
最佳答案
不必在静态初始化程序块中调用它;它也可以在实例初始化程序中调用,它看起来像静态初始化程序块,但没有单词static
:
public class MyClass {
staticFunction(); // Not allowed!
{
staticFunction(); // Allowed.
}
private static int staticFunction() {
return 1;
}
}
每当您创建新的
MyClass
对象时,都会调用实例初始化程序。 (通常,如果在构造函数中放入类似的内容,效果会大致相同。但是实例初始化程序对于无法编写自己的构造函数的匿名类很有用。)