静态初始化块

2017-05-12  本文已影响0人  phoebe_gyq
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实例,静态的会存在虚拟机内,故只需要执行一次。

上一篇 下一篇

猜你喜欢

热点阅读