Сообщения

Показаны сообщения с ярлыком "инициализация классов в Java"

Спецификация Java 11: 12.4.2. Подробная процедура инициализации

Изображение
Поскольку язык программирования Java является многопоточным, инициализация класса или интерфейса требует тщательной синхронизации, поскольку какой-то другой поток может одновременно пытаться инициализировать тот же класс или интерфейс. Также существует вероятность того, что инициализация класса или интерфейса может быть запрошена рекурсивно как часть инициализации этого класса или интерфейса; например, инициализатор переменной в классе A может вызывать метод несвязанного класса B, который, в свою очередь, может вызывать метод класса A. Реализация виртуальной машины Java отвечает за синхронизацию и рекурсивную инициализацию с использованием следующей процедуры. Процедура предполагает, что объект Class уже был проверен и подготовлен, и что объект Class содержит состояние, которое указывает на одну из четырех ситуаций: Этот объект класса проверен и подготовлен, но не инициализирован. Этот объект класса инициализируется некоторым конкретным потоком T. Этот объект класса полностью иниц...

Спецификация Java 11: 12.4. Инициализация классов и интерфейсов

Изображение
Инициализация класса состоит из выполнения его статических инициализаторов и инициализаторов для статических полей (переменных класса), объявленных в классе. Инициализация интерфейса заключается в выполнении инициализаторов для полей (констант), объявленных в интерфейсе. 12.4.1. Когда происходит инициализация Класс или тип интерфейса T будет инициализирован непосредственно перед первым появлением любого из следующих событий: T - это класс, и создается экземпляр T. Вызывается статический метод, объявленный T. Назначено статическое поле, объявленное T. Используется статическое поле, объявленное T, и поле не является постоянной переменной (§4.12.4). Когда класс инициализируется, инициализируются его суперклассы (если они не были ранее инициализированы), а также любые суперинтерфейсы (§8.1.5), которые объявляют любые методы по умолчанию (§9.4.3) (если они не были ранее инициализированы). Инициализация интерфейса сама по себе не вызывает инициализацию какого-либо из его суперинтер...