Проблема
Можете ли вы догадаться, каков будет результат приведенного ниже Java-кода?
Код
public class InstanceInitializerTest { public static void main(String[] args) { { System.out.println("Feathers"); } } { System.out.println("Snowy"); } }
Опции
Список возможных результатов таков:
1. Snowy 2. Snowy Feathers 3. Feathers 4. Feathers Snowy
Решение
Правильный ответ: (3) Перья
Объяснение
Инициализаторы экземпляра представляют собой блоки кода, определенные между парой фигурных скобок – {
и }
. На самом деле они не имеют значения, даже если они присутствуют внутри метода, и они действительно учитываются.
В приведенной выше программе, когда мы запускаем программу, выполняется метод main()
, внутри которого у нас есть инициализатор экземпляра, и он выполняется. Поскольку это был единственный исполняемый оператор внутри метода main()
, выполнение программы на этом завершилось.
Вы можете задаться вопросом, почему другой инициализатор экземпляра, который печатает Снежный
не был выполнен. Как вы видите, инициализатор 2-го экземпляра не был привязан к методу, вместо этого он был привязан к классу. Поскольку мы не инициировали класс, инициализатор экземпляра на уровне класса не вызывался.
Работа для мозга
Попробуйте создать экземпляр класса (внутри метода main()
– конечно) и посмотрите изменения в выводе.
Вы получите результат либо как (2) Снежный, Перья
ИЛИ (4) Перья, Снежинки
в зависимости от того, где вы создаете экземпляр класса – до или после инициализатора экземпляра внутри метода main()
.
Помните, порядок инициализаторов имеет большое значение:)
Оригинал: “https://dev.to/itsraghz/interesting-java-puzzle-instance-initializers-5hd3”