我有以下代码。
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对象。在这种情况下,它在第三个实例化。这是为什么?这里有适用的特殊概念吗?