jvm javaクラスを初期化するにはどのような作業が必要ですか?

1925 ワード

1.2つのクラスがあり、Aクラスは次のとおりです.
public class A {
	private static A a=new A();//        
	private static B b=B.getInstance();
	private A(){}
	public static A getInstance(){
		System.out.println("A    ...."+a);		
		return a;
	}
	public void test(){
		System.out.println("A   b:"+b);
		
		
	}
}

 
B類:
public class B {
	private static B b=new B();//        
	private static A a=A.getInstance();
	
	private B(){
		
	}
	public static B getInstance(){
		System.out.println("B    ...."+b);
		return b;
	}
	public void test(){		
		System.out.println("B   a:"+a);
	}
}

 もう一つのテストクラスCがあります.
public class C {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		B b=B.getInstance();
		b.test();
		System.out.println("=====");
		B b1=B.getInstance();
		b1.test();
		System.out.println("=====");
		B b2=B.getInstance();
		b2.test();
		
		A a=A.getInstance();
		a.test();
		
		System.out.println("----------");
		A a1=A.getInstance();
		a1.test();
		

	}

}

 まとめ:javaeyeで見た投稿http://hllvm.group.iteye.com/group/topic/25526ですが、この問題は面白いと思います.推敲してみてください.JAvaクラスを初期化するとき、jvmは静的メンバー変数の初期化を優先し、構造関数であるため、この2つのクラスのインスタンス化はデッドサイクルだと思っていたが、jvmはすべてのクラスを1回だけ初期化することでデッドサイクルは発生しないことが分かった.しかしjvmがクラスをどのように初期化するかについては、夢中になっています.ネット上で良い文章を見てhttp://www.webspherechina.net/?viewnews-51644.htmlを共有しました.