Когда происходит инициализация статического поля

Учти это:

Class A
{
 private static B b = new B();
 private static C c;

 static
 {
 c= new C();
 }
}
  1. Является ли инициализация b встречей при загрузке класса?
  2. Тот же вопрос для инициализации c
  3. Что происходит с первой инициализацией b или c? Пожалуйста, дайте мне ссылку на java-документы относительно этих проблем, если они есть.

благодаря

2 ответа

Переменные класса инициализируются во время загрузки класса в текстовом порядке, как если бы они были одним блоком, поэтому сначала сначала инициализируется b, а затем c, как указано на шаге 9 Подробной процедуры инициализации, определенной в Спецификации языка Java.


Блок кода со статическим модификатором означает инициализатор класса; без статического модификатора блок кода является инициализатором экземпляра.

Статические инициализаторы выполняются в том порядке, в котором они определены (сверху вниз, как и простые инициализаторы переменных), когда класс загружен (фактически, когда он разрешен, но это техничность).

Инициализаторы экземпляра выполняются в порядке, определенном при создании экземпляра класса, непосредственно перед выполнением кода конструктора сразу после вызова супер-конструктора.

статический блок

licensed under cc by-sa 3.0 with attribution.