помогите понять очерёдность выполнения блоков в коде
имеем код
public class Test {
{
System.out.println("block 1");
}
static {
System.out.println("static 2");
}
Test() {
System.out.println("constructor 3");
}
{
System.out.println("block 4");
}
public static void main(String[] args) {
Test test1 = new Test();
{
System.out.println("main 5");
}
}
}
вывод :
static 2
block 1
block 4
constructor 3
main 5
если я правильно понял, статические блоки отрабатывают единожды и в первую очередь на уровне класса...
тогда почему после static 2 не отработал конструктор в статик методе?
а потом уже блок 1 и 4 и 5? Хотя в дебагере после вывода статик2 скакнул в конструктор , но не напечатал constructor 3.
Ответы (1 шт):
Автор решения: Barmaley
→ Ссылка
Механизм очередности получается такой:
- сначала загружаем класс (работает
ClassLoader) при нем вызываетсяstatic 2 - Далее начинается поиск точки входа, которой всегда является
static main(), который является частью классаTest, соответственно срабатывают инициализирующие блоки классаTest(Instance Initializer Block) (block 1/4) - Далее
static main()- срабатываетconstructor 3 - За ним уже
main 5