さあ、Java Silver試験に向けて、変数スコープの知識を強化するための問題を解いてみましょう。
問題
次のプログラムを実行した場合、出力される結果は何でしょうか?最も適切な選択肢を選んでください。
public class ScopeDemo {
static int staticVar = 100;
public static void main(String[] args) {
int localVar = 50;
for (int i = 0; i < 1; i++) {
int localVar = 10; // ここで再宣言
System.out.println("Loop localVar: " + localVar);
}
System.out.println("Method localVar: " + localVar);
System.out.println("Static variable: " + staticVar);
}
}
選択肢
- A. Loop localVar: 10, Method localVar: 50, Static variable: 100
- B. コンパイルエラー
- C. Loop localVar: 10, Method localVar: 10, Static variable: 100
- D. 実行時エラー
答えと解説
回答を見る
答え
B. コンパイルエラー
解説
解説のポイント:
- 変数のスコープについて
- ローカル変数の再宣言について
基本説明:
変数のスコープとは、変数が有効になる範囲のことを指します。Javaでは、変数のスコープによってどこでその変数を使用できるかが決まります。
今回の問題では、ループ内で変数localVarを再宣言しようとしています。for
ループやブロック内での変数宣言は可能ですが、同じスコープ内で同じ名前の変数を宣言することはできません。
誤答理由:
ローカル変数localVar
がmainメソッド内ですでに宣言されているため、for
ループ内で再度同じ名前の変数を宣言するとコンパイルエラーになります。
このような場合、選択肢B. コンパイルエラー
が正解です。他の選択肢は、再宣言が可能であることを前提としており誤りです。
つまずきポイント:
変数の再宣言について初心者がよく混乱するポイントです。特に、一時的に使い捨てることの多いループ変数や、ブロック内でのスコープに気をつけましょう。
スコープを理解することで、プログラムのバグを未然に防ぐことができます。
発展知識:
Javaにおけるスコープには、ローカルスコープ、クラススコープ、パッケージスコープ、そして一番外側のグローバルスコープがあります。
今回のように同じスコープ内での変数の重複はコンパイルエラーを引き起こしますが、異なるスコープでの同名変数は問題なく使用できます。
これを理解するためには、変数がどのスコープで定義されているかと、変数のライフサイクルを意識することが重要です。