Я пытаюсь объединить процесс инициализации и инстанцирования в JVM, но JLS немного тупо на нескольких деталях, поэтому, если кто-то не возражает, чтобы прояснить некоторые детали, это будет оценено. Это то, что мне удалось выяснить до сих пор.
инициализация
-
Рекурсивно Инициализировать статические конечные переменные класса и его интерфейсы, которые являются константами времени компиляции.
-
Возврат из рекурсии обработки статических блоков и статических полей в текстовом порядке.
Конкретизация
-
Рекурсивно Инициализировать конечные переменные экземпляра класса, которые являются константами времени компиляции.
-
Возврат из рекурсии обработки нестатических блоков и полей экземпляра в текстовом порядке, доводя их до конструкторов по мере их возврата.
Хорошо, так что теперь для вопросов.
-
обрабатываются интерфейсы в порядке декларации?
-
обрабатываются интерфейсы в отдельном рекурсивном стеке?
а) если да, интерфейсы обрабатываются до или после суперклассов?
б) если да, могу ли я исправить вывод о том, что один или другие (Интерфейс или Суперкласс) получает свои константные поля не компиляции, инициализированные до остальных констант компиляции.
-
Какую роль в этом процессе играют вызовы конструктора super() nefefault?
-
Я ошибаюсь в любых моих выводах?
-
Не хватает ли каких-либо других ключевых данных?