JMemo027

[BACK]

staticイニシャライザとinstanceイニシャライザ

こんなプログラムを書いてみた。

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

最終更新:2012年08月06日 10:02