java静态初始化块、普通初始化块、构造器执行顺序

来源:互联网 发布:高级sql编程 编辑:程序博客网 时间:2024/05/20 11:37

下面以代码+运行结果+原因描述的形式来说明该执行顺序:

代码:

package test;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的无参构造器");    }    public Mid(String msg) {        this();        System.out.println("Mid的带参构造器,其参数值: " + msg);    }}class Leaf extends Mid {    static {        System.out.println("Leaf的静态初始化块");    }    {        System.out.println("Leaf的普通初始化块");    }    public Leaf() {        super("我是一只可爱的参数");        System.out.println("Leaf的无参构造器执行");    }}public class test {    public static void main(String[] args) {        new Leaf();        new Leaf();        }}

截图:
这里写图片描述

描述:
1.一旦Leaf类初始化成功后,Leaf类会在该虚拟机里一直存在,因此第二次创建Leaf实例时,无需再次对Leaf类进行初始化。
2.系统在类初始化阶段,会先执行最顶层父类的静态初始化块,然后一次向下,直到执行当前类的静态初始化块。
3.对象初始化阶段,(如果调用到最上层的构造器,则)会先执行最顶层父类的初始化块、构造器,然后向下依次执行被调用的父类的初始化块、构造器..最后才执行Leaf类的初始化构造器。

参考:疯狂java讲义,请勿随意复制转载

0 0
原创粉丝点击