知らなかったことを話す

1482 ワード

1.次のコードは合法的ですか?
public  class Complex{
	
	private Complex instance=new Complex(2);
	public Complex(int i){
		System.out.println(i);
	}
	public static void main(String args[]){
		
		Complex complex=new Complex(1);
		
	}
}

出力結果:
Exception in thread "main"java.lang.StackOverflowError
at com.wjy.enumstudy.Complex.(Complex.java:8)
at com.wjy.enumstudy.Complex.(Complex.java:8)
at com.wjy.enumstudy.Complex.(Complex.java:8)
at com.wjy.enumstudy.Complex.(Complex.java:8)
at com.wjy.enumstudy.Complex.(Complex.java:8)
原因:無限の再帰が現れた.インスタンスinstance初期化操作は、コンストラクタのプログラムボディよりも先に実行されます.
 
    2.次のコードを見てください.
public  class Complex{
	
	private static Complex instance=new Complex(2);
	public Complex(int i){
		System.out.println(i);
	}
	public static void main(String args[]){
		
		Complex complex=new Complex(1);
		
	}
}

実行結果:
2
1
 
3.最後にこれを見ます.
public  class Complex{
	
	private static Complex instance=new Complex(2);
	public Complex(int i){
		System.out.println(i);
	}
	public static void main(String args[]){
		
		//Complex complex=new Complex(1);
		
	}
}

出力結果:
2