こんなプログラムを書いてみた。
▼TestInstanceInitializer.java
public class TestInstanceInitializer { public static void main(String[] args) { System.out.println("This is main."); Test t = new Test(); t.method01(); } } class Test { static { System.out.println("executing static initializer..."); } { System.out.println("executing instance initializer..."); } public Test() { System.out.println("executing constructor..."); } public void method01() { System.out.println("executing method01..."); } }
実行すると、次のように表示される。
D:\work>java TestInstanceInitializer This is main. executing static initializer... executing instance initializer... executing constructor... executing method01...
スタティックイニシャライザ。 プログラムの実行と同時に実行されるわけではなく、あくまで mainメソッドからそのクラスが参照される時点で実行される。
インスタンスイニシャライザ。 newする瞬間に実行される。 別にコンストラクタに処理を書けばいいじゃんという話だが、何かの役に立つのかもしれない。 例えばコンストラクタが複数あって、初期処理の前半が全部一緒、とか言う場合か。 でも普通はその場合、メソッド化して呼び出すよなぁ。