////////////////////////////////////////////////////////////////////////////////
//  << j222c.java >>
//
//  クラス(2):スコープ(ローカル変数のスコープ)
//
//  ・入れ子構造のブロック内で同じ名前のローカル変数は宣言できない。
//  ・ブロック内で宣言されたローカル変数は、ブロック外で解放される。
//
//  (1)ブロック内で異なる名前のローカル変数は宣言できる。
//  (2)ブロック内で同じ名前のローカル変数は宣言できない。
//  (3)ブロック内でローカル変数は参照できる。
//  (4)ブロック外でローカル変数は参照できない。
//
////////////////////////////////////////////////////////////////////////////////

class C {
  void m() {
    int a = 111;
    // ブロック1。
    { 
      int b = 222; //(1)
      System.out.println("(2)int a; はエラー"); //(2)
      System.out.println("(3)b = " + b); //(3)
    }
    System.out.println("(3)a = " + a); //(3)
    System.out.println("(4)ローカル変数bの参照はできない"); //(4)
  }
}

class j222c {
  public static void main(String args[]) {

    C obj = new C();

    obj.m();

  }

}
実行結果
% javac j222c.java
% java j222c
(2)int a; はエラー
(3)b = 222
(3)a = 111
(4)ローカル変数bの参照はできない