Java : 不思議なブロック

ええと、下のコードを自分で書いて、何故コンパイルが通るのか、しばらく悩んでいました。特に static { } という奴。
使い方としては、コンストラクタを書いたり、初期化用メソッドを書いたりしないで初期化コードを書きたいときとかに使えるのかな。static { } の方は、シングルトンを作るときに便利かもね。

class Outer {
  interface Inner {
    int num1();
    int num2();
  }

  /* インスタンスコンテキスト */
  Inner inner;
  int num1 = 1;

  {
    final int num2 = 2;
    class InnerImpl implements Inner {
      public int num1() { return num1;}
      public int num2() { return num2;}
    }
    inner = new InnerImpl();
  }

  /* スタティックコンテキスト */
  static Inner innerStatic;
  static int numS1 = 3;

  static {
    final int numS2 = 4;
    class InnerStaticImpl implements Inner {
      public int num1() { return numS1;}
      public int num2() { return numS2;}
    }
    innerStatic = new InnerStaticImpl();
  }
}

ちなみに、static { } の方は、staticイニシャライザとか静的初期化子とかという名前がついているらしい。