我有以下代码。
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()
一切都好。是这样的,应该是这样的。当我在 Z 类中创建 X() 的静态对象时,如下所示
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()
输出没问题,因为静态实例首先加载到 RAM 中。但是当我像这样制作静态对象实例时
X x1 = new X();
我得到以下输出
X()
Y()
X()
Z()
这真的让我很困惑。据我所知,我应该得到以下输出
X()
Y()
Z()
X()
首先将实例化 Z 对象,最后实例化 X 对象。在这种情况下,它在第三个实例化。这是为什么?有什么特殊的概念适用于此吗?