MENU

【Java Silver 試験】変数のスコープの理解を深める実践的問題

さあ、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におけるスコープには、ローカルスコープ、クラススコープ、パッケージスコープ、そして一番外側のグローバルスコープがあります。

今回のように同じスコープ内での変数の重複はコンパイルエラーを引き起こしますが、異なるスコープでの同名変数は問題なく使用できます。

これを理解するためには、変数がどのスコープで定義されているかと、変数のライフサイクルを意識することが重要です。

目次