Я пытаюсь обнаружить порядок, в котором происходит инициализация, или, скорее, причина, почему происходит инициализация в этом порядке. С учетом кода:
public class Main {
{
System.out.printf("NON-STATIC BLOCK\n");
}
static{
System.out.printf("STATIC BLOCK\n");
}
public static Main m = new Main();
public Main(){
System.out.printf("MAIN CONSTRUCTOR\n");
}
public static void main(String... args) {
//Main m = new Main();
System.out.printf("MAIN METHOD\n");
}
}
Вывод:
STATIC BLOCK
NON-STATIC BLOCK
MAIN CONSTRUCTOR
MAIN METHOD
Однако перемещение объявления m
перед созданием блока инициализации:
NON-STATIC BLOCK
MAIN CONSTRUCTOR
STATIC BLOCK
MAIN METHOD
и я совершенно не знаю, почему это происходит в этом порядке. Кроме того, если я исключаю ключевое слово static
в объявлении m
, ни блок init, ни огонь конструктора. Может ли кто-нибудь помочь мне с этим?