コンストラクタのタイミングを知る

クラスのフィールドにて、各メソッドでnewするのではなくフィールドの宣言と同時にnewしたときに、いったいいつフィールドのコンストラクタは呼ばれるのだろうとちょっと思い、コードを書いてみた。

public class ConstructorTiming {

	AAA a = new AAA();
	public ConstructorTiming() {
		System.out.println("aaa");
	}
	
	public static void main(String[] args) {
		System.out.println("開始");
		ConstructorTiming hoge = new ConstructorTiming();
		System.out.println("終了");
	}

}

class AAA {
	public AAA() {
		System.out.println("AAAのコンストラクタ");
	}
}

実行してみると、

開始
AAAのコンストラクタ
aaa
終了

ってな結果。自身のコンストラクタより先にフィールドのコンストラクタが呼ばれることがわかった。まぁ、想像どおり。