创建子类对象时,静态代码块、构造代码块、构造方法的执行顺序
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 }