证明加载类的动作仅发生一次

来源:互联网 发布:node pdf导出 编辑:程序博客网 时间:2024/05/17 16:15
public class Ex23 extends B{    //3 (i,j,k ==1    static int k = printInit("Ex23 k initializer");    Ex23(){        System.out.println("Ex23 constructor");    }    public static void main(String args[]){        //4        System.out.println("hi");        //        System.out.println(new A());        System.out.println(C.a);        D d = new D();    }}class D{    D(){        //10        System.out.println("D constructor");    }}class C{    //7 (k == 1    static int k = printInit("k initializer");    static A a = new A();    static int printInit(String s){        System.out.println(s);        return 1;    }}class B extends A{    //2    static int j = printInit("j initializer");    B(){        System.out.println("B constructor");    }}class A{    //1    static int i = printInit("i initializer");    static int printInit(String s){        System.out.println(s);        return 1;    }    A(){        //5        //8        System.out.println("A constructor()");    }    @Override    //6    //9    public String toString(){        return "A toString";    }}

控制台输出顺序为

i initializerj initializerEx23 k initializerhiA constructor()A toStringk initializerA constructor()A toStringD constructor

由此可见,类的加载仅在该类的第一个实例的创建或者对static成员的访问时才发生。

0 0