У меня есть следующий код.
class X {
X(){
super();
System.out.println("X()");
}
}
class Y extends X {
Y(){
super();
System.out.println("Y()");
}
}
class Z extends Y {
Z(){
super();
System.out.println("Z()");
}
public static void main(String args[]){
Z z1 = new Z();
}
}
И я получаю вывод
X()
Y()
Z()
Все хорошо. Так и должно быть. И когда я создаю статический объект X() в классе Z следующим образом
class X {
X(){
super();
System.out.println("X()");
}
}
class Y extends X {
Y(){
super();
System.out.println("Y()");
}
}
class Z extends Y {
static X x1 = new X();
Z(){
super();
System.out.println("Z()");
}
public static void main(String args[]){
Z z1 = new Z();
}
}
X()
X()
Y()
Z()
Вывод в порядке, потому что статические экземпляры сначала загружаются в ОЗУ. Но когда я создаю экземпляр статического объекта, подобный этому
X x1 = new X();
Я получаю следующий вывод
X()
Y()
X()
Z()
Что меня действительно смущает. Что касается моих знаний, я должен получить следующий вывод
X()
Y()
Z()
X()
Сначала будет создан объект Z, а в последнюю очередь должен быть создан объект X. В этом случае он создается на третьем. Почему это? Есть ли здесь какая-то особая концепция?
X x1 = new X();
это уже не статично, верно? - person Soumitri Pattnaik   schedule 21.05.2015Z
. - person Bubletan   schedule 21.05.2015