- 締切済み
Javaに関する初歩的な質問です。
Javaを勉強中なのですが、 class Test{ public static void main(String args[]){ int a = 10; { int a = 10; } } } これがエラーになる理由がいまいちわかりません。 ぜひとも教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- root139
- ベストアンサー率60% (488/809)
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; } } } ----------------------------------------
- mintia007
- ベストアンサー率59% (16/27)
Javaの言語規定では、 「局所変数の識別子の宣言が,同じ名前の仮引数又は同名の局所変数の範囲内に現れたら,コンパイル時エラーが発生する。」 となっています(局所変数はローカル変数とも呼びます)。例え{}ブロックで区切ってもNGです。 但し、メンバー変数を同名のローカル変数や仮引数変数等として取り扱うことはできます。 そういう規定なのでルールとして従うしかありません。 さんこうURLのちょい下にあるfor文で変数iを再定義しています。これはNG。
- vonvori
- ベストアンサー率41% (14/34)
Javaでは同じ変数名は使えません。 たとえそれが{}でくくられている別の区域であってもです。