Возможный дубликат:
Почему cant enums конструктор не может получить доступ к статическим полям?
enum Test {
e1,e2;
int i=0;
static int j=5;
Test(){
System.out.println(i+" "+j);
}
}
В приведенном выше коде конструктор может получить доступ к переменной экземпляра, но не к статической переменной J.
Я прочитал ответ, относящийся к другому автору, все говорят, что e1 и e2 инициализированы до инициализации J (статическое поле), но согласно java spec все статическое поле инициализируется когда-либо класс, загруженный в память, то есть перед запуском конструктора. Поэтому перед запуском конструктора Test() статическая переменная j должна быть инициализирована. Я не могу понять ограничения, может ли кто-нибудь из вас заставить меня понять. Я уже прочитал ответ на вопросы Почему не может перечислить конструктор для доступа к статическим полям? Я не доволен ответом: "Конструктор вызывается до того, как все статические поля были инициализированы.
Предположим, если взять еще один пример с простым классом, например enum
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 выполнил инициализацию). Но не ошибка компиляции или отсутствие проблемы времени выполнения. Тогда почему то же самое не происходит с перечислением.