【Java SE17 Silver 模擬試験】B-36

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のコードをコンパイル、実行するとどうなりますか。

public class Main {
	public static void main(String... args) {
		Location.printLocation();
	}
}

class Location {
	String address;

	public Location(String location) {
		this.address = location;
	}

	public Location() {
		address = "";
	}

	public static void printLocation() {
		System.out.println(address);
	}
}

選択肢

A)NullPointerException がスローされる

B)コンパイルエラーになる

C)何も表示されない

D)””が出力される

E)nullが出力される

解答

A)NullPointerException がスローされる

B)コンパイルエラーになる

C)何も表示されない

D)””が出力される

E)nullが出力される

解説

コードの構造

  1. クラス定義: Location クラスが定義されています。このクラスにはインスタンス変数 address があります。
  2. コンストラクタ:
    • 引数付きコンストラクタ: Location(String location)address を指定された location で初期化します。
    • 引数なしコンストラクタ: Location()address を空の文字列で初期化します。
  3. 静的メソッド: printLocation() メソッドは静的メソッドで、address を出力しようとします。

静的メソッドでの問題

  • printLocation() メソッドは静的メソッドですが、address はインスタンス変数です。静的メソッド内からインスタンス変数を直接参照することはできません。
  • address はクラスのインスタンスが作成された場合にのみ存在するため、静的な文脈ではアクセスできません。

結果

このコードを実行すると、printLocation() メソッド内で address にアクセスしようとしてコンパイルエラーが発生します。

正しい選択肢

したがって、正しい選択肢は B)コンパイルエラーになる です。

前の問題へ SE17_B-35

次の問題へ  SE17_B-37

対象資格:Java SE17 認定資格