Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念。下面探究一下它的执行顺序与可能的用途。

执行顺序

  首先定义A, B, C三个类用作测试,其中B继承了A,C又继承了B,并分别给它们加上静态初始化块、非静态初始化块和构造函数,里面都是一句简单的输出。

  主类Main里面也如法炮制。

 1 class A {
 2     static {
 3         System.out.println("Static init A.");
 4     }
 5 
 6     {
 7         System.out.println("Instance init A.");
 8     }
 9 
10     A() {
11         System.out.println("Constructor A.");
12     }
13 }
14 
15 class B extends A {
16     static {
17         System.out.println("Static init B.");
18     }
19 
20     {
21         System.out.println("Instance init B.");
22     }
23 
24     B() {
25         System.out.println("Constructor B.");
26     }
27 }
28 
29 class C extends B {
30 
31     static {
32         System.out.println("Static init C.");
33     }
34 
35     {
36         System.out.println("Instance init C.");
37     }
38 
39     C() {
40         System.out.println("Constructor C.");
41     }
42 }
43 
44 public class Main {
45 
46     static {
47         System.out.println("Static init Main.");
48     }
49 
50     {
51         System.out.println("Instance init Main.");
52     }
53 
54     public Main() {
55         System.out.println("Constructor Main.");
56     }
57 
58     public static void main(String[] args) {
59         C c = new C();
60         //B b = new B();
61     }
62 }
测试代码

相关文章: