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 */