static コンテキストについて
JLS2 8.1.2 より。static コンテキスト内で定義された内部クラスは外側のクラスへの参照を持たないので、例えば外側のクラスのインスタンス変数などへはアクセスできない。
class StaticContext { // static コンテキストではない Object o1 = new Object() { }; // クラス変数の初期化子は static コンテキスト static Object o2 = new Object() { }; StaticContext(Object obj) { // static コンテキストではない class Inner1 { } } static { // クラス初期化子の中は static コンテキスト class Inner2 { } } { // static コンテキストではない class Inner3 { } } } class StaticContextChild extends StaticContext{ StaticContextChild() { // super() や this() 呼び出しの引数は static コンテキスト。 // まだこのオブジェクトは初期化されてないから。 // こんなのいちいち覚えている人はいるのだろうか……。 super(new Object() { }); } }