Рубрики
Без рубрики

Интересная головоломка Java – Инициализаторы экземпляров

Тест инициализатора экземпляра в задаче Java Можете ли вы догадаться, каков будет результат?.. Помеченный как java, ocaja, первый, технический.

Проблема

Можете ли вы догадаться, каков будет результат приведенного ниже 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”