Явная ссылка на класс во время статической инициализации не допускается. Почему?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Явная ссылка на класс во время статической инициализации не допускается. Почему?

Сообщение Anonymous »

Примечание. Надеюсь, вопросы «почему» попадают в категорию «другие».
Это компилируется.

Код: Выделить всё

class MyClass {

private static final String STRING;

static {
STRING = "abc";
}
}
Это не так.

Код: Выделить всё

class MyClass {

private static final String STRING;

static {
MyClass.STRING = "abc";
}
}

Код: Выделить всё

MyClass.java:8: error: cannot assign a value to final variable string
MyClass.string = "abc";
^
1 error
Почему? Был ли это осознанный дизайнерский выбор? Я предполагаю, что оба фрагмента должны быть скомпилированы в один и тот же байт-код (аналогично тому, как это делается с помощью nonstaticMethod() и this.nonstaticMethod()). javac может отличить инициализатор от простого метода, поэтому у него не должно возникнуть проблем с распознаванием присваивания в последнем фрагменте как инициализацию.
Это как-то связано с загрузчиками классов? Классы, загружаемые разными загрузчиками, могут иметь одно и то же полное имя.
Java 8.

Подробнее здесь: https://stackoverflow.com/questions/798 ... llowed-why
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»