下面是一道经典题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class X { Y y1 = new Y();
X() { System.out.println("X"); } }
class Y { Y() { System.out.println("Y"); } }
public class Z extends X { Y y2 = new Y(); Z() { System.out.println("Z"); }
public static void main(String[] args) { new Z(); System.out.println("程序结束"); } }
|
判断输出结果:
结果是:
Y
X
Y
Z
程序结束
分析一下,Java类成员的执行顺序:
1、父类公共的静态属性初始化或执行静态的块级代码(本题无)
2、初始化声明本身的公共的静态属性(本题无)
3、初始化声明父类公共属性(本题中的Y y1=new Y();)
4、执行父类的构造方法(本题中的X())
5、初始化声明本身的公共属性(本题中的Y y2 = new Y();)
6、执行本身的构造函数(本题中的Z();)
7、静态方法不执行(本题无)
(本文系作者原创,转载请注明出处)