1 package testExtends;
2
3 /**
4 * @TODO 1、测试静态代码块、构造代码块、构造方法的执行顺序
5 * 2、测试创建子类对象时,子类和父类的 静态代码块、构造代码块、构造方法的执行顺序
6 * 测试结果:
7 * 1、静态代码块、构造代码块、构造方法依次执行(静态代码块在类加载时执行)
8 * 2、创建子类对象时的工作流程:
9 * 加载父类--加载子类--初始化父类--初始化子类
10 * 3、类的初始化
11 * 3.1 分层初始化:初始化父类---->初始化子类
12 * 3.2 类的内部初始化:成员变量的初始化---->构造方法初始化
13 * 3.2.1 成员变量的初始化顺序:
14 * 隐式初始化(int i;默认初始化为0)---->显式初始化(int i=10;)
15 * 3.2.2 构造方法初始化顺序:
16 * 构造代码块----->构造方法
17 */
18 public class TestExecutionSequence {
19 @SuppressWarnings("unused")
20 public static void main(String args[]){
21 System.out.println("--------第一次new---------");
22 Child Child1 = new Child();
23 System.out.println("\n--------第二次new---------");
24 Child Child2 = new Child();
25 System.out.println("\n--------第三次new---------");
26 Child Child3 = new Child("kangkang");
27 }
28
29 }
30
31 /**
32 * 父类Father
33 */
34 class Father{
35 static int i;
36 int j = i;
37 static {
38 System.out.println("执行Father静态代码块"+" i="+i++);
39 }
40
41 {
42 System.out.println("执行Father构造代码块"+" i="+i+++"j="+j);
43 }
44
45 public Father(){
46 System.out.println("执行Father无参构造方法"+" i="+i+++"j="+j);
47 }
48
49 public Father(String name){
50 System.out.println("执行Father含参构造方法 "+name+" i="+i+++"j="+j);
51 }
52 }
53 /**
54 * 子类Child
55 */
56 class Child extends Father{
57 static {
58 System.out.println("执行Child静态代码块"+" i="+i++);
59 }
60 {
61 System.out.println("执行Child构造代码块"+"i="+i+++"j="+j);
62 }
63 public Child(String name){
64 // super(name);
65 System.out.println("执行Child含参构造方法 "+name+" i="+i+++"j="+j);
66 }
67 public Child(){
68 // super();
69 System.out.println("执行Child无参构造方法"+" i="+i+++"j="+j);
70 }
71
72 /*
73 运行结果:
74 --------第一次new---------
75 执行Father静态代码块 i=0
76 执行Child静态代码块 i=1
77 执行Father构造代码块 i=2j=2
78 执行Father无参构造方法 i=3j=2
79 执行Child构造代码块i=4j=2
80 执行Child无参构造方法 i=5j=2
81
82 --------第二次new---------
83 执行Father构造代码块 i=6j=6
84 执行Father无参构造方法 i=7j=6
85 执行Child构造代码块i=8j=6
86 执行Child无参构造方法 i=9j=6
87
88 --------第三次new---------
89 执行Father构造代码块 i=10j=10
90 执行Father无参构造方法 i=11j=10
91 执行Child构造代码块i=12j=10
92 执行Child含参构造方法 kangkang i=13j=10
93 */
94
95
96 }