Добро пожаловать в Java Jeopardy!
Алекс, я возьму Инициализацию за 500 долларов.
“Блок кода, который компилятор Java копирует в каждый конструктор”.
Что такое блок инициализатора экземпляра.
Что сказать!?!?
Инициализация Java
В поле вряд ли можно увидеть что-либо, кроме стандартной инициализации конструктора. Однако, если вы пройдете Java Tutorial (“Java Trail”) по классам и объектам , вы узнаете, что Java поддерживает некоторые другие интересные способы инициализации как членов экземпляра, так и статических членов класса.
К ним относятся статические блоки инициализации, инициализация экземпляра и конечные методы. Я опишу каждый из них по очереди, но, скорее всего, вам будет легче испытать это на себе. В конце этого поста я включил в Github Суть класса Java, блоки инициализации В двух словах, используя все формы инициализации одновременно и выводя строку на консоль в каждой из них. Это простой способ увидеть порядок выполнения различных видов инициализации. Ради забавы попробуйте переставить их местами. Я обнаружил, что размещение окончательной инициализации метода ниже блока инициализации экземпляра, а не выше, изменило порядок их выполнения. То же самое произошло и с размещением статических блоков инициализации внутри класса. Берегитесь!
Блок статической инициализации
Как следует из термина, это блок кода для выполнения инициализации чего-либо в статическом контексте. Как таковой, он запускается, когда класс загружается в JVM. Если вам нужен простой способ понимания этого непрофессионалом, все члены, объявленные статическими, будут выполняться “сначала. ” Целью блока статической инициализации является инициализация любых статических членов класса. Одним из распространенных способов использования этого является заполнение любых коллекций (например, наборов или карт), которые класс использует в качестве справочного материала.
Блок инициализации
Как упоминалось выше, блоки инициализации являются одним из способов совместного использования кода между конструкторами. Вот что говорится в упомянутом Java Trail:
Компилятор Java копирует блоки инициализатора в каждый конструктор. Следовательно, этот подход может быть использован для совместного использования блока кода между несколькими конструкторами
Окончательная инициализация метода
Это методы, помеченные как final и вызываемые во время объявления переменной. Вот что говорится в упомянутом Java trail об окончательной инициализации метода:
Это особенно полезно, если подклассы могут захотеть повторно использовать метод инициализации. Метод является окончательным, поскольку вызов не окончательных методов во время инициализации экземпляра может вызвать проблемы.
Какой-то код
Я запустил следующий код через компилятор Java 8 и среду выполнения. Чтобы хорошо провести время, попробуйте поэкспериментировать с порядком переменных i и static Var по отношению к их соответствующим блокам инициализации или статической инициализации.
Этот пост первоначально появился на Этот пост первоначально появился на .
Оригинал: “https://dev.to/scottshipp/java-initialization-in-a-nutshell-2lmm”