Я написал кусок кода:
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
Детский конструктор
Детский конструктор
получить у
получить х
Значение z равно 0
Детский конструктор
значение z в main равно 0
Может кто-нибудь объяснить, почему значение z равно 0, а не 10?
РЕДАКТИРОВАТЬ: - Спасибо всем, я получил ответ на свой первый вопрос. У меня все еще есть сомнения, насколько я знаю, статические блоки выполняются после загрузки класса и до того, как будет создан первый объект класса. Что ж, тогда SOP («Значение z равно» + z) должно быть выполнено до SOP («Дочерний конструктор»)! Не так ли?