静态初始化块

package javaTest;

public 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("java");
            System.out.println("无参数构造器Leaf");
        }
        
        
 }
 
public class Test {
    public static void main(String[] args) {
        new Leaf();
        new Leaf();
    }

}

执行结果:

静态ROOT
静态Mid
静态Leaf
普通ROOT
无参数构造器ROOT
普通Mid
无参数构造器Mid
有参数构造器Midjava
普通Leaf
无参数构造器Leaf
普通ROOT
无参数构造器ROOT
普通Mid
无参数构造器Mid
有参数构造器Midjava
普通Leaf
无参数构造器Leaf

分析:
1.每次创建一个Leaf对象的时候,
先静态,再无构造器,最后有构造器。静态的父类和子类先执行。
2.先父类再子类
3.两次创建Leaf实例,静态的会存在虚拟机内,故只需要执行一次。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容