Что выведет код Middle Основы: типы, обёртки, static спрашивают часто обновлено

Что выведет: порядок static и конструкторов

Вопрос

Что выведет программа (Java 21)? Каждый вывод println с новой строки.

public class Main {
    static class A {
        static { System.out.println("A static"); }
        { System.out.println("A init"); }
        A() { System.out.println("A()"); }
    }
    static class B extends A {
        static { System.out.println("B static"); }
        { System.out.println("B init"); }
        B() { System.out.println("B()"); }
    }
    public static void main(String[] args) {
        new B();
        new B();
    }
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: A static, B static, A init, A(), B init, B(), A init, A(), B init, B(). Статические блоки выполняются один раз при инициализации класса: сначала родитель, потом наследник.

Что выведет

A static
B static
A init
A()
B init
B()
A init
A()
B init
B()

Разбор

Статические блоки выполняются один раз при инициализации класса: сначала родитель, потом наследник. Затем для каждого объекта: блок экземпляра и конструктор A, потом блок экземпляра и конструктор B. Второй new B() уже не трогает статику.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.