构造代码块和静态代码块,构造函数的执行

构造代码块:给对象进行初始化,对象一建立就运行而且优于构造函数执行。

构造代码块和构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给指定的对象进行初始化。

静态代码块:随着类的加载而执行,只执行一次。

分析下面程序执行的结果:

 1 class Test7 {
 2     static {
 3         System.out.println("aaaaaaaaaaaaaaaaaaa");
 4     }
 5     {
 6         System.out.println("bbbbbbbbbbbbbbbbbbb");
 7     }
 8     Test7(){
 9         System.out.println("构造函数运行");
10     }
11 
12     void print() {
13         System.out.println("ccccccccccccccccccc");
14     }
15 
16     static {
17         System.out.println("eeeeeeeeeeeeeeeeeee");
18     }
19 }
 1 public class Test9 {
 2     static {
 3         System.out.println("dddddddddddddddddddd");
 4     }
 5 
 6     public static void main(String[] args) {
 7 
 8         Test7 d = new Test7();
 9         d.print();
10         new Test7();
11     }
12 
13     static {
14         System.out.println("fffffffffffffffffff");
15     }
16 
17 }

程序运行的结果为:

  dddddddddddddddddddd
  fffffffffffffffffff
  aaaaaaaaaaaaaaaaaaa
  eeeeeeeeeeeeeeeeeee
  bbbbbbbbbbbbbbbbbbb
  构造函数运行
  ccccccccccccccccccc                //因为静态代码块随着类的加载而执行且只执行一次
  bbbbbbbbbbbbbbbbbbb   //这里重新new一个对象时,静态代码块不会执行,而构造代码块和构造函数执行
  构造函数运行

结论:优先级顺序为

      静态代码块>构造代码块>构造函数

原文地址:https://www.cnblogs.com/dafa4java/p/3242300.html