Я написал кусок кода:Java - статическая инициализация
public class Child{
int y ;
private static final int z = getZ();
static {
System.out.println("The value of z is "+z);
}
public int getX(){
System.out.println("get x");
return 10;
}
public int getY(){
Child ch = new Child();
System.out.println("get y");
ch.y = getX();
return y;
}
public static int getZ(){
System.out.println("get z");
return new Child().getY();
}
public Child(){
System.out.println("Child constructor");
}
public static void main(String...args){
Child ch = new Child();
System.out.println("the value of z in main is "+z);
}
}
И выход:
прибудет г
Детский конструктор
Детского конструктор
прибудет у
прибудут х
Значение z равно 0
Детский конструктор
Значение z в главном 0
Может ли кто-нибудь объяснить мне, почему значение z равно 0, а не 10?
EDIT: - Спасибо всем, я получил ответ на свой первый вопрос. Я все еще сомневаюсь, насколько я знаю, статические блоки выполняются после загрузки класса и до того, как будет создан экземпляр первого объекта класса. Ну, тогда SOP («Значение z» + z) должно быть выполнено до SOP («Конструктор ребенка»)! Не так ли?
Что вы видите, когда вы пошагово ваша программа в отладчике? –