构造器 (二)

2014-11-24 10:11:46 · 作者: · 浏览: 1
intInitC(String s) { System.out.println(s); return 1; } } class D { D() { System.out.println("D() constructor"); } } public class LoadClass extends B { static int i = printInit("LoadClass.i initialized"); LoadClass() { System.out.println("LoadClass() constructor"); } public static void main(String[] args) { // accessing static main causes loading (and initialization) // of A, B, & LoadClass System.out.println("hi"); // call constructors from loaded classes: LoadClass lc = new LoadClass(); // call to static field loads & initializes C: System.out.println(C.a); // call to constructor loads D: //D d = new D(); } } /** * 请证明加载类的动作仅发生一次,证明该类的第一个实体 * 的创建或者对static成员的访问都有可能引起加载*/ class A { static int j = printInit("A.j initialized"); static int printInit(String s) { System.out.println(s); return 1; } A() { System.out.println("A() constructor"); } } class B extends A { static int k = printInit("B.k initialized"); B() { System.out.println("B() constructor"); } } class C { static int n = printInitC("C.n initialized"); static A a = new A(); C() { System.out.println("C() constructor"); } static int printInitC(String s) { System.out.println(s); return 1; } } class D { D() { System.out.println("D() constructor"); } } public class LoadClass extends B { static int i = printInit("LoadClass.i initialized"); LoadClass() { System.out.println("LoadClass() constructor"); } public static void main(String[] args) { // accessing static main causes loading (and initialization) // of A, B, & LoadClass System.out.println("hi"); // call constructors from loaded classes: LoadClass lc = new LoadClass(); // call to static field loads & initializes C: System.out.println(C.a); // call to constructor loads D: //D d = new D(); } }