创建子类对象时,静态代码块、构造代码块、构造方法的执行顺序

 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 }

 

posted @ 2017-04-22 21:46  Ascetic  阅读(464)  评论(0编辑  收藏  举报