类的加载顺序
原创
©著作权归作者所有:来自51CTO博客作者mb64660286caedc的原创作品,请联系作者获取转载授权,否则将追究法律责任
/** * 父类 * */ public class Parent { private int ix = 50; private static int iz = getNext(30); { System.out.println("Parent的初始化块"); int x = 100; int y = getNext(100); } static { System.out.println("Parent的静态初始化块"); int sx = 100; int sy = getNext(100); } public Parent() { System.out.println("Parent的构造方法被调用"); } public void display() { System.out.println("Parentde的display方法被调用"); System.out.print("ix=" + this.ix); System.out.println("; iz=" + iz); dispA(); } public static int getNext(int base) { System.out.println("Parent的getNext(int base)被调用"); return ++base; } public static void dispA() { System.out.println("Parent的dispA()被调用"); } protected void finalize() { System.out.println("Parent的销毁方法被调用"); } }
public class Child extends Parent { { System.out.println("Child的初始化块"); int bx = 100; } static { System.out.println("Child的静态化初始化块"); } public Child() { super(); System.out.println("Child的构造方法被调用"); } public static void dispB() { System.out.println("Child的dispB()被调用"); } /** * 当Java进行垃圾回收时,会调用对象的finalize方法 */ protected void finalize() { System.out.println("Child的销毁方法被调用"); super.finalize(); } }
/** * 类的加载顺序 * */ public class ClassInitOrderTest { public static void main(String args[]) { System.out.println("不new对象,访问静态方法时的输出:"); Child.dispB(); System.out.println(); System.out.println("new对象,访问非静态方法时的输出:"); new Child().display(); //通知虚拟机进行垃圾回收 System.gc(); } }