java 类初始化顺序

来源:互联网 发布:淘宝上卖av的店铺 编辑:程序博客网 时间:2024/04/27 16:48

类的初始化顺序
静态变量 -> 静态初始化块 -> 变量 -> 初始化块 -> 构造函数
测试代码

public class ObjectInit {       //静态变量    public static final StaticField STATIC_FIELD = new StaticField();    //静态初始化块    static{        System.out.println("静态初始化块");    }    //变量    private String field = "变量";    //初始化块    {        System.out.println(field);        System.out.println("初始化块");    }    //构造函数    public ObjectInit(){        System.out.println("构造函数");    }    public static void main(String[] ages){        new ObjectInit();    }}

还重定义的静态变量的类

public class StaticField {    public StaticField(){        System.out.println("StaticField controctor");    }    @Override    public String toString() {        return "StaticField controctor";    }}

执行结果

StaticField controctor静态初始化块变量初始化块构造函数

当继承父类时的执行顺序是怎样的呢
父类代码:

public class Parent {    //静态变量    public static final StaticField PARENT_STATIC_FIELD = new StaticField("父类   静态变量");    //静态初始化块    static{        System.out.println("父类   静态初始化块");    }    //变量    private StaticField field = new StaticField("父类  变量");    //初始化块    {        System.out.println("父类  初始化块");    }    //构造函数    public Parent(){        System.out.println("父类 构造函数");    }}

子类代码:

public class Child extends Parent {    //静态变量    public static final StaticField CHILD_STATIC_FIELD = new StaticField("子类  静态变量 ");    //静态初始化块    static{        System.out.println("子类 静态初始化块");    }    //变量    private StaticField field = new StaticField("子类  变量");    //初始化块    {        System.out.println("子类 初始化块");    }    //构造函数    public Child(){        System.out.println("子类 构造函数");    }    public static void main(String[] agrs){        new Child();    }}

辅助类

public class StaticField {    public StaticField(){        System.out.println("StaticField controctor");    }    public StaticField(String name){        System.out.println(name);    }    @Override    public String toString() {        return "StaticField controctor";    }}

最后执行结果,很清晰看到继承的初始化顺序

父类   静态变量父类   静态初始化块子类  静态变量 子类 静态初始化块父类  变量父类  初始化块父类 构造函数子类  变量子类 初始化块子类 构造函数
0 0
原创粉丝点击