1 /* 2 初始化块:普通初始化块、静态初始化块(类初始化块) 3 4 下面程序创建了三个类:Root,Mid和Leaf, 5 者三个类都提供了静态初始化块和普通初始化块, 6 而且Mid类里还是用this调用重载构造区,而 7 Leaf使用super显示调用父类指定的构造器 8 */ 9 class Root 10 { 11 static{ 12 System.out.println("Root的静态初始化块"); 13 } 14 15 { 16 System.out.println("Root的普通初始化块"); 17 } 18 public Root() 19 { 20 System.out.println("Root的无参数的构造器"); 21 } 22 } 23 24 class Mid extends Root 25 { 26 static{ 27 System.out.println("Mid的静态初始化块"); 28 } 29 30 { 31 System.out.println("Mid的普通初始化块"); 32 } 33 public Mid() 34 { 35 System.out.println("Mid的无参数的构造器"); 36 } 37 public Mid(String msg) 38 { 39 //通过this调用同一类中重载的构造器 40 this(); 41 System.out.println("Mid的带参数的构造器,其参数值是:"+msg); 42 } 43 } 44 45 class Leaf extends Mid 46 { 47 static{ 48 System.out.println("Leaf的静态初始化块"); 49 } 50 51 { 52 System.out.println("Leaf的普通初始化块"); 53 } 54 55 public Leaf() 56 { 57 //通过super调用父类中有一个字符串参数的构造器 58 super("疯狂Java讲义"); 59 System.out.println("执行Leaf的构造器"); 60 } 61 } 62 63 class Test 64 { 65 public static void main(String[] args) 66 { 67 new Leaf(); 68 new Leaf(); 69 } 70 } 71 /* 72 运行如下:(好好理解理解) 73 ---------- 运行 ---------- 74 Root的静态初始化块 75 Mid的静态初始化块 76 Leaf的静态初始化块 77 Root的普通初始化块 78 Root的无参数的构造器 79 Mid的普通初始化块 80 Mid的无参数的构造器 81 Mid的带参数的构造器,其参数值是:疯狂Java讲义 82 Leaf的普通初始化块 83 执行Leaf的构造器 84 Root的普通初始化块 85 Root的无参数的构造器 86 Mid的普通初始化块 87 Mid的无参数的构造器 88 Mid的带参数的构造器,其参数值是:疯狂Java讲义 89 Leaf的普通初始化块 90 执行Leaf的构造器 91 92 输出完成 (耗时 0 秒) - 正常终止 93 */