public class Test extends A{ static{ System.out.println("子类静态代码块"); } { System.out.println("子类普通代码块"); } static String s3=print(""); String s4=printl(""); static String print(String s){ System.out.println("子类静态变量"); return s; } String printl(String s){ System.out.println("子类普通变量"); return s; } Test(){ System.out.println("子类构造器"); } public static void main(String []args){ new Test();new Test(); } } class A{ static{ System.out.println("基类静态代码块"); } { //System.out.println(this.getClass().getName()); System.out.println("基类普通代码块"); } static String s1=print(""); String s2=printl(""); static String print(String s){ System.out.println("基类静态变量"); return s; } String printl(String s){ System.out.println("基类普通变量"); return s; } A(){ System.out.println("基类构造器"); } }
运行结果:
基类静态代码块 基类静态变量 子类静态代码块 子类静态变量 基类普通代码块 子类普通变量 基类构造器 子类普通代码块 子类普通变量 子类构造器 基类普通代码块 子类普通变量 基类构造器 子类普通代码块 子类普通变量 子类构造器
注意在基类普通代码块中并未调用基类方法,而是调用了子类重载方法,原因是此类初始化时,基类中的this是子类的对象,所以会动态绑定调用重载方法。
关于Java初始化顺序测试
最新推荐文章于 2023-03-01 09:53:17 发布