今回も問題を解いていきましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
public class Main {
public static void main(String[] args) {
int x = 10;
{
int y = 5;
x = y + 10;
}
System.out.println("x: " + x + ", y: " + y);
}
}
選択肢
- A. x: 15, y: 5
- B. x: 15
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
C. コンパイルエラー
解説
解説のポイント:
- 変数のスコープの基本
- 変数yのスコープとコンパイルエラーの原因
- 他の似た状況でのつまずきポイント
- 発展知識: スコープの活用方法
Javaのスコープとは、プログラムの中でどこで変数を使用できるかを定義する範囲のことです。
識別子には適用される範囲があり、ローカル変数は宣言されたブロック内でのみ有効です。
今回のコードでは、変数yはブロック内で宣言されています。
そのため、その外で使用しようとすると認識されずエラーが発生します。
誤答理由とコンパイルエラーの原因
コード中でSystem.out.printlnではyを参照しようとしていますが、変数yはブロック内でのみ有効です。
このため、ブロック外でyを参照するとコンパイルエラーになります。
ブロック内でのみ有効な変数は、カーブ隠れた場所でのみ動作すると考えてください。
つまずきポイント
変数のスコープの理解はスコープチェーンやネストされたブロックの中での使用に関係しています。
コンパイルエラーは見落としがちなミスから生じ、特に新しいスコープに入るたびに通常はすべての変数が無効になります。
発展知識: スコープの活用方法
スコープの理解は、プログラムの効率的な設計に役立ちます。
変数のスコープを適切に制御することで、メモリ使用量を最小限に抑えつつ、予期しない動作を防ぐことができます。
スコープはメソッドやループなどで有用に活用でき、これを意識することでプログラムはより安全で効率的になります。