可能重复:
为什么枚举的构造函数不能访问静态字段?
enum Test {
e1,e2;
int i=0;
static int j=5;
Test(){
System.out.println(i+" "+j);
}
}
在上面的代码中,构造函数可以访问实例变量,但不能访问静态变量 J。
我已经阅读了与其他作者相关的答案,所有人都说在初始化 J(静态字段)之前初始化了 e1 和 e2,但是根据 java 规范,当类加载到内存时,所有静态字段都被初始化,即在运行之前构造函数。因此,在运行 Test() 构造函数之前,必须初始化静态变量 j。我无法理解限制,任何人都可以让我理解。我已经阅读了问题的答案为什么枚举的构造函数不能访问静态字段?但我对这样的答案不满意:-在静态字段全部初始化之前调用构造函数。
假设如果再举一个像枚举这样的简单类的例子
class Test{
public static final Test t=new Test();
static int a=5;
Test(){
System.out.println(a);
}
public static void main(String[] args) {
}
}
这里根据那里的论点,构造函数将在静态字段初始化之前运行,并且它也在运行,因为它打印 0(正如 JVM 进行了初始化)。但是没有编译错误或没有运行时问题。那么为什么枚举不会发生同样的事情。