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"); } }