記憶庫

自分用のメモです。

初期化処理を最速で実行するには?

初期化処理は、どこに記述すれば最速で実行されるかを検証する。

まずは、以下のようなクラスを作成。

class TestClass {
	public TestClass(String aMsg) {
		System.out.println(aMsg + " から呼び出されました。");
		return;
	}
}

上記クラスは、インスタンスの生成時に受け取った引数を元に文字列を作成し、標準出力に表示する。



次に、以下のようなクラスを作成。

public class InitializeTest {
	
	static {
		new TestClass("static イニシャライザ");
	}
	
	{
		new TestClass("イニシャライザ");
	}
	
	InitializeTest() {
		new TestClass("コンストラクタ");
		return;
	}
	
	public static void main(String args[]) {
		new InitializeTest();
		return;
	}
	
	private TestClass test = new TestClass("変数の宣言時に生成");
}

実行すると、標準出力に以下の通り表示される。


static イニシャライザ から呼び出されました。
イニシャライザ から呼び出されました。
変数の宣言時に生成 から呼び出されました。
コンストラクタ から呼び出されました。


以上から、初期化処理はイニシャライザに記述すると最速で実行されることがわかる。