构造代码块:给对象进行初始化,对象一建立就运行而且优于构造函数执行。
构造代码块和构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给指定的对象进行初始化。
静态代码块:随着类的加载而执行,只执行一次。
分析下面程序执行的结果:
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一个对象时,静态代码块不会执行,而构造代码块和构造函数执行
构造函数运行
结论:优先级顺序为
静态代码块>构造代码块>构造函数