Java继承中子类与父类的执行顺序

下面是一道经典题:

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、静态方法不执行(本题无)

(本文系作者原创,转载请注明出处)