— Привет, Амиго! Слышала, Риша рассказал тебе новую и очень интересную тему?!
— Да, Ким.
— Моя тема будет не менее интересной. Я хочу рассказать тебе о загрузке в память классов.
Классы в Java – это файлы на диске, содержащие байт-код – скомпилированный Java-код.
— Да, я помню.
— Java-машина не загружает их без необходимости. Как только где-то в коде происходит обращение к классу, Java-машина проверяет – загружен ли он. И если нет, то загружает и инициализирует его.
Инициализация класса – это присваивание значений всех его статических переменных и вызов всех статических блоков.
— Похоже на вызов конструктора у объекта. А что такое статический блок?
— Если для инициализации переменных объекта нужно выполнить сложный код (например, что-то загрузить из файла), мы можем сделать это в конструкторе. Статические переменные такой возможности лишены. Но т.к. потребность в этом осталась, в классы можно добавить статический блок или блоки, которые по сути своей эквивалентны вызову статических конструкторов.
Вот как это выглядит:
Код | Что происходит на самом деле |
---|---|
|
|
Это очень похоже на то, что происходит при вызове конструктора. Я даже записала это в виде несуществующего статического конструктора.
— Да, я все понял.
— Отлично.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ