こんなプログラムを書いてみた。
▼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する瞬間に実行される。 別にコンストラクタに処理を書けばいいじゃんという話だが、何かの役に立つのかもしれない。 例えばコンストラクタが複数あって、初期処理の前半が全部一緒、とか言う場合か。 でも普通はその場合、メソッド化して呼び出すよなぁ。