JAVA_02

class Test2_Extents{
    public static void main(String[] args){
        System.out.println("Hello World");
        Zi z = new Zi();
        /*
        1.Jvm 调用main方法,
        main方法进栈
        2.遇到Zi z = new Zi(),会现将Fu.class和Zi.class分别加载进内存,在创建对象,当Fu.class加载进内存 父类的静态代码块会随着Fu.class一起加载,当Zi.class加载进内存,子类的静态代码块儿会随着Zi.class一起加载 静态代码块Fu,第二个输出静态代码块Zi
        3.走Zi类的构造方法,因为在Java中是分成初始化的,先初始化父类,在初始化子类,所以先走的父类构造,但是在执行父类构造的时候,发现父类有构造代码块,构造代码块儿是优先于构造方法执行的所以 第三个输出构造代码块Fu,第四个输出构造方法Fu
        4.Fu类初始化结束,子类初始化,第五个输出的是构造代码块Zi,最后输出构造方法Zi
         */
    }
}
class Fu{
    static{
        System.out.println("静态代码块Fu");
    }
    {
        System.out.println("构造代码块Fu");
    }
    public Fu(){
        System.out.println("构造方法Fu");
    }
}
class Zi extends Fu{
    static {
        System.out.println("静态代码块Zi");
    }
    {
        System.out.println("构造代码块Zi");
    }
    public Zi(){
        System.out.println("构造方法Zi");
    }
}

https://www.tongbiao.xyz/
原文地址:https://www.cnblogs.com/tongbiao/p/8319156.html