Java中的初始化块、构造器、静态初始化块的执行顺序
概念
静态初始化块:用来对类进行初始化(又称为类初始化)
初始化块:用来对对象进行初始化
构造器:创建一个对象时,调用的方法。可以进行初始化,默认有一个无参数构造器,但一旦自己写了有参数构造器后,系统就不会再提供默认的无参数构造器了。
执行顺序
先 静态初始化块 (并且只执行一次)当第一次使用到该类时,JVM加载该类,进行类初始化,一旦加载成功就永在JVM内存中,直到JVM退出。
再 初始化块
再 构造器
另外:初始化某个类时,总是先初始化该类的所有父类(包括直接父类和间接父类)。
1. 代码(参考《疯狂java》)
public class ConversionTest { public static void main(String [] args) { new Leaf(); new Leaf(); } } /* 结果: Root 静态初始化块 Mid 静态初始化块 Leaf 静态初始化块 Root 普通初始化块 Root 构造器 Mid 普通初始化块 Mid 构造器 Leaf 普通初始化块 Leaf 构造器 Root 普通初始化块 Root 构造器 Mid 普通初始化块 Mid 构造器 Leaf 普通初始化块 Leaf 构造器 */ class Root { //静态初始化块 static{ System.out.println("Root 静态初始化块"); } //初始化块 { System.out.println("Root 普通初始化块"); } //构造器 public Root(){ System.out.println("Root 构造器"); } } class Mid extends Root { //静态初始化块 static{ System.out.println("Mid 静态初始化块"); } //初始化块 { System.out.println("Mid 普通初始化块"); } //构造器 public Mid(){ System.out.println("Mid 构造器"); } } class Leaf extends Mid { //静态初始化块 static{ System.out.println("Leaf 静态初始化块"); } //初始化块 { System.out.println("Leaf 普通初始化块"); } //构造器 public Leaf(){ System.out.println("Leaf 构造器"); } }
************
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。