Этот вопрос проверяет знание устройства JVM и понимание жизненного цикла статических данных.
Статические поля хранятся в области памяти, связанной с классом, а не с объектом. Они существуют в единственном экземпляре для всего приложения. Эти поля инициализируются при загрузке класса. Их время жизни совпадает с временем жизни класса в JVM.
Статические поля играют особую роль в Java, так как они принадлежат не объекту, а самому классу.
Статическое поле — это поле класса, общее для всех его экземпляров.
Оно объявляется с использованием ключевого слова static.
Перед тем как говорить о деталях, важно понимать общий принцип.
Статические поля хранятся в области памяти класса
Эта область связана с загрузчиком классов
Поля существуют в одном экземпляре
В современных JVM:
Метаданные класса находятся в Metaspace
Значения статических полей хранятся в куче, но логически принадлежат классу
Жизнь статического поля выглядит следующим образом:
Класс загружается JVM
Статические поля инициализируются
Поля доступны из любого места приложения
Поля удаляются при выгрузке класса
Пример:
class Config {
static int timeout = 30;
}
Статические поля принадлежат классу, существуют в одном экземпляре и живут столько же, сколько и сам класс в JVM, что делает их удобными, но потенциально опасными при неправильном использовании.