构造代码块 :给对象进行初始化,对象一建立就运行而且优于构造函数执行。
构造代码块和构造函数的区别 :构造代码块是给所有对象进行统一初始化,而构造函数是给指定的对象进行初始化。
静态代码块 :随着类的加载而执行,只执行一次。
分析下面程序执行的结果:
- class Test7 {
- static {
- System.out.println("aaaaaaaaaaaaaaaaaaa");
- }
- {
- System.out.println("bbbbbbbbbbbbbbbbbbb");
- }
- Test7(){
- System.out.println("构造函数运行");
- }
- void print() {
- System.out.println("ccccccccccccccccccc");
- }
- static {
- System.out.println("eeeeeeeeeeeeeeeeeee");
- }
- }
- public class Test9 {
- static {
- System.out.println("dddddddddddddddddddd");
- }
- public static void main(String[] args) {
- Test7 d = new Test7();
- d.print();
- new Test7();
- }
- static {
- System.out.println("fffffffffffffffffff");
- }
- }
程序运行的结果为:
dddddddddddddddddddd
fffffffffffffffffff
aaaaaaaaaaaaaaaaaaa
eeeeeeeeeeeeeeeeeee
bbbbbbbbbbbbbbbbbbb
构造函数运行
ccccccccccccccccccc //因为静态代码块随着类的加载而执行且只执行一次
bbbbbbbbbbbbbbbbbbb //这里重新new一个对象时,静态代码块不会执行,而构造代码块和构造函数执行
构造函数运行
结论:优先级顺序为
静态代码块>构造代码块>构造函数