静态代码块和匿名代码块的区别
静态块: static { }
匿名块: { }
静态块只在类第一次被加载的时候执行一次,一般用于进行初始化工作;
匿名块在每一次创建本类对象或者子类对象时都会被调用一次 ; 对于父类,每创建一个父类对象都会调用一次父类匿名块;对于子类,每创建一个子类对象都先调用父类匿名块,再调用子类的匿名块。
在一个类中可以有多个静态块和匿名块,在类加载的时候静态块是按照先后顺序执行的,在创建对象的时候匿名块也是按照先后顺序执行的。
类的加载顺序
规则:
- static 变量
- static 代码块
- 成员变量
- 匿名块
- 构造器
- ps:先加载父类,再加载子类
顺序:
父类的静态字段——>父类静态代码块——>子类静态字段——>子类静态代码块——>
父类成员变量(非静态字段)——>父类非静态代码块——>父类构造器——>
子类成员变量——>子类非静态代码块——>子类构造器