静态初始化模块执行顺序

Posted cxy0210

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态初始化模块执行顺序相关的知识,希望对你有一定的参考价值。

测试静态初始化模块执行顺序的程序:

 1 class Root
 2 {
 3     static{
 4         System.out.println("Root的静态初始化块");
 5     }
 6     {
 7         System.out.println("Root的普通初始化块");
 8     }
 9     public Root()
10     {
11         System.out.println("Root的无参数的构造器");
12     }
13 }
14 class Mid extends Root
15 {
16     static{
17         System.out.println("Mid的静态初始化块");
18     }
19     {
20         System.out.println("Mid的普通初始化块");
21     }
22     public Mid()
23     {
24         System.out.println("Mid的无参数的构造器");
25     }
26     public Mid(String msg)
27     {
28         //通过this调用同一类中重载的构造器
29         this();
30         System.out.println("Mid的带参数构造器,其参数值:" + msg);
31     }
32 }
33 class Leaf extends Mid
34 {
35     static{
36         System.out.println("Leaf的静态初始化块");
37     }
38     {
39         System.out.println("Leaf的普通初始化块");
40     }    
41     public Leaf()
42     {
43         //通过super调用父类中有一个字符串参数的构造器
44         super("Java初始化顺序演示");
45         System.out.println("执行Leaf的构造器");
46     }
47 
48 }
49 
50 public class TestStaticInitializeBlock
51 {
52     public static void main(String[] args) 
53     {
54         new Leaf();
55         
56 
57     }
58 }

 

运行结果如下:

Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:Java初始化顺序演示
Leaf的普通初始化块
执行Leaf的构造器

 

先执行Static的初始化方法,然后执行普通初始化方法,之后是无参的构造器,其次有参的构造器。

结论:首先执行的是父类静态初始化模块,然后是子类静态初始化模块,然后再是由父类到子类依次执行普通、无参、有参的构造器。

1.static静态初始化块只执行一次

2.在执行子类的静态初始化块时会调用父类的静态初始化块。 

以上是关于静态初始化模块执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

关于静态块静态属性构造块构造方法的执行顺序

Java对象初始化顺序

java中静态代码块,非静态代码块,构造函数执行顺序

java中的静态代码块、代码块、构造器的执行顺序是怎样呢,这三者有啥作用呢

执行顺序

静态代码块静态变量构造方法及构造块执行顺序