class abc {
int a = 0;
static int b;
static abc h = new abc(); //line 4
public abc() {
System.out.println("cons");
}
{
System.out.println("ini");
}
static {
System.out.println("stat");
}
}
public class ques {
public static void main(String[] args) {
System.out.println(new abc().a);
}
}
Когда я написал этот код, я получаю вывод в следующем порядке:
ini
cons
stat
ini
cons
0
Здесь, когда я создал новый объект в main(), class abc
, был загружен, а переменные static
и блоки выполняются в порядке их написания. Когда управление переходит к строке 4 static abc h = new abc();
Вызывается блок инициализации экземпляра. Зачем? почему статический блок не вызывается, когда новый объект создается в строке 4, и до этого времени статический блок также не вызывался даже один раз, поэтому в соответствии с соглашением должен был быть вызван статический блок. Почему этот неожиданный выход идет?