初期化子

static初期化子は知ってたけど、インスタンス初期化子は知らなかった・・・

ってわけで、挙動確認。

class A {
    static {
        System.out.println("a s_init");
    }
    {
        System.out.println("a init");
    }
    A() {
        System.out.println("a cons");
    }
}
class B extends A {
    static {
        System.out.println("b s_init");
    }
    {
        System.out.println("b init");
    }
    B() {
        System.out.println("b cons");
    }
}
public class InitTest {
    public static void main(String[] args) {
        System.out.println("main");
        new B();
    }
}

出力:

main
a s_init
b s_init
a init
a cons
b init
b cons


super呼び出し後にインスタンス初期化子が呼ばれる形かな。


そういや、static初期化子の実行はmainの前にごっそりってわけじゃなくて、
クラスが必要になってからだったな。