先上结论
执行顺序:先执行静态初始化块,然后时初始化块,最后是构造函数
书写格式:
注意事项:
1. 静态初始化块
静态初始化块只在类首次加载时执行一次,同时静态初始化块只能给静态变量赋值,不能给普通成员变量赋值。
静态初始化块不需要在main方法中调用,即使没有main方法它也会执行
2. (非静态)初始化块
(非静态)初始化块在每次生成实例对象时都执行一次,可以给任意变量赋值。
如果对类没有进行实例化,初始化块不会执行,但是静态初始化块会执行。
3. 构造方法
构造方法在每次生成实例对象时都执行一次
通过反编译可以看到,构造代码块中的代码也是在构造方法中执行的。在编译时的编译器看来会默认将构造代码块中的代码移动到构造方法中,并且移动到构造方法内容的前面。
另外需要注意的一点是在执行子类的构造方法之前会先执行父类的默认构造函数即无参构造函数
来源:oschina
链接:https://my.oschina.net/fairy1674/blog/3179652