Один из часто задаваемых вопросов новичков (и даже опытных разработчиков) — когда именно выполняется инициализация статических полей и static блоков в Java? Интуитивно может показаться, что это происходит сразу при запуске программы или при первом упоминании класса. Но на самом деле всё немного тоньше — и связано с работой ClassLoader'а и инициализацией класса. Важно разделять два этапа: Согласно Java Language Specification (JLS §12.4), инициализация класса запускается в следующих случаях: ⚠️ Обратите внимание: чтение static final константы, известных на этапе компиляции (например, public static final int X = 42), не вызывает инициализацию класса. Рассмотрим простой пример: Теперь вызовем из другого класса: Вывод: Before accessing class Static block executed initValue() called Value: 100 Как видите — статический блок и метод initValue() выполнились только в момент первого обращения к полю value, а не раньше. Если в классе есть несколько статических полей и блоков, они инициализируются
Когда инициализируются static блоки и статические переменные в Java?
14 ноября14 ноя
1 мин