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 构造器"); }    
}

************

常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
原文地址:https://www.cnblogs.com/htj10/p/13269313.html