問題
次のコードをコンパイル、実行するとどうなりますか。
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が出力される
解説
コードの構造
- クラス定義:
Location
クラスが定義されています。このクラスにはインスタンス変数address
があります。 - コンストラクタ:
- 引数付きコンストラクタ:
Location(String location)
はaddress
を指定されたlocation
で初期化します。 - 引数なしコンストラクタ:
Location()
はaddress
を空の文字列で初期化します。
- 引数付きコンストラクタ:
- 静的メソッド:
printLocation()
メソッドは静的メソッドで、address
を出力しようとします。
静的メソッドでの問題
printLocation()
メソッドは静的メソッドですが、address
はインスタンス変数です。静的メソッド内からインスタンス変数を直接参照することはできません。address
はクラスのインスタンスが作成された場合にのみ存在するため、静的な文脈ではアクセスできません。
結果
このコードを実行すると、printLocation()
メソッド内で address
にアクセスしようとしてコンパイルエラーが発生します。
正しい選択肢
したがって、正しい選択肢は B)コンパイルエラーになる です。
対象資格:Java SE17 認定資格