• 締切済み

Javaに関する初歩的な質問です。

Javaを勉強中なのですが、 class Test{ public static void main(String args[]){ int a = 10; { int a = 10; } } } これがエラーになる理由がいまいちわかりません。 ぜひとも教えてください。

みんなの回答

  • root139
  • ベストアンサー率60% (488/809)
回答No.3

Java では同じ名前の変数の有効範囲が重なっているとコンパイルエラーになります。 変数などの有効範囲のことはスコープとも言います。 最初のaの有効範囲は、その行以降のmainメソッド全体になりますので、2番目のaと重複する区間ができてしまいます。 ---[ 有効範囲 ]-------------------------  class Test{   public static void main(String args[]){ ↑  int a = 10; 最 初  { の   int a = 10; // このaはここから次の行の「}」まで a  } ↓   }  } ---------------------------------------- ちなみに1つのメソッド内でも↓の様にスコープが重なっていなければ、同じ名前の変数を定義する事はOKです。 ---------------------------------------- class Test{  public static void main(String args[]){   {    int a = 10;   }   {    int a = 10;   }  } } ----------------------------------------

参考URL:
http://msugai.fc2web.com/java/scope.html
  • mintia007
  • ベストアンサー率59% (16/27)
回答No.2

Javaの言語規定では、 「局所変数の識別子の宣言が,同じ名前の仮引数又は同名の局所変数の範囲内に現れたら,コンパイル時エラーが発生する。」 となっています(局所変数はローカル変数とも呼びます)。例え{}ブロックで区切ってもNGです。 但し、メンバー変数を同名のローカル変数や仮引数変数等として取り扱うことはできます。 そういう規定なのでルールとして従うしかありません。 さんこうURLのちょい下にあるfor文で変数iを再定義しています。これはNG。

参考URL:
http://docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#14.4.2
  • vonvori
  • ベストアンサー率41% (14/34)
回答No.1

Javaでは同じ変数名は使えません。 たとえそれが{}でくくられている別の区域であってもです。

専門家に質問してみよう