为什么枚举构造函数无法访问静态字段
可能的重复:
为什么枚举的构造函数无法访问静态字段?
enum Test {
e1,e2;
int i=0;
static int j=5;
Test(){
System.out.println(i+" "+j);
}
}
在上面的代码中,构造函数可以访问实例变量,但不能访问静态变量 J。
我读过的答案与其他作者有关,都说e1和e2在初始化之前初始化了J(静态字段),但是根据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一样初始化)。但是没有编译错误或没有运行时问题。那么为什么同样的事情没有发生在枚举中。