执行构造的顺序

构造代码块 :给对象进行初始化,对象一建立就运行而且优于构造函数执行。 
构造代码块和构造函数的区别 :构造代码块是给所有对象进行统一初始化,而构造函数是给指定的对象进行初始化。 
静态代码块 :随着类的加载而执行,只执行一次。 
分析下面程序执行的结果:

  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.      void print() {
  12.         System.out.println("ccccccccccccccccccc");
  13.      }
  14.      static {
  15.          System.out.println("eeeeeeeeeeeeeeeeeee");
  16.     }
  17. }
复制代码
  1. public class Test9 {
  2. static {
  3.         System.out.println("dddddddddddddddddddd");
  4.      }
  5.     public static void main(String[] args) {
  6.        Test7 d = new Test7();
  7.          d.print();
  8.         new Test7();
  9.      }
  10.     static {
  11.        System.out.println("fffffffffffffffffff");
  12.     }
  13. }
复制代码



程序运行的结果为:

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

结论:优先级顺序为

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

原文地址:https://www.cnblogs.com/luoquan/p/5319826.html