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

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

問題

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

public class Main {
	public static void main(String... args) {
		Person p1 = new Person("Duke");
		System.out.print(p1.name + ":" + p1.country + ",");
		Person p2 = new Person("Scott");
		System.out.print(p2.name + ":" + p2.country + ",");
		p2.country = "US";
		System.out.print(p1.name + ":" + p1.country + ",");
		System.out.print(p2.name + ":" + p2.country + ",");
	}
}

class Person {
	public static String country;
	public String name;

	public Person(String name) {
		this.name = name;
		country = "JPN";
	}
}

選択肢

A)Duke:JPN,Scott:JPN,Duke:JPN,Scott:US, が出力される

B)Sakila:JPN,Scott:JPN,Sakila:JPN,Scott:US, が出力される

C)Sakila:JPN,Scott:US,Sakila:JPN,Scott:US, が出力される

D)Duke:JPN,Scott:JPN,Duke:US,Scott:US, が出力される

E)Sakila:US,Scott:US,Sakila:US,Scott:US, が出力される

解答

A)Duke:JPN,Scott:JPN,Duke:JPN,Scott:US, が出力される

B)Sakila:JPN,Scott:JPN,Sakila:JPN,Scott:US, が出力される

C)Sakila:JPN,Scott:US,Sakila:JPN,Scott:US, が出力される

D)Duke:JPN,Scott:JPN,Duke:US,Scott:US, が出力される

E)Sakila:US,Scott:US,Sakila:US,Scott:US, が出力される

解説

実行の流れ

  1. Person p1 = new Person("Duke");
    • p1 が作成され、コンストラクタが呼ばれます。
    • this.name に “Duke” が設定され、country は “JPN” に設定されます。
    • 現在の状態:
      • p1.name = “Duke”
      • Person.country = “JPN”
  2. System.out.print(p1.name + ":" + p1.country + ",");
    • 出力は Duke:JPN, になります。
  3. Person p2 = new Person("Scott");
    • p2 が作成され、同様にコンストラクタが呼ばれます。
    • this.name に “Scott” が設定され、country は再び “JPN” に設定されます(これは静的変数なので、全てのインスタンスで共通です)。
    • 現在の状態:
      • p1.name = “Duke”
      • p2.name = “Scott”
      • Person.country = “JPN”
  4. System.out.print(p2.name + ":" + p2.country + ",");
    • 出力は Scott:JPN, になります。
  5. p2.country = "US";
    • country が “US” に変更されます。
    • 現在の状態:
      • p1.name = “Duke”
      • p2.name = “Scott”
      • Person.country = “US”(両方のインスタンスが同じ静的変数を参照)
  6. System.out.print(p1.name + ":" + p1.country + ",");
    • p1.country は静的変数 country を参照するため、出力は Duke:US, になります。
  7. System.out.print(p2.name + ":" + p2.country + ",");
    • 同様に、出力は Scott:US, になります。

最終的な出力

全体として、出力は以下のようになります:

Duke:JPN,Scott:JPN,Duke:US,Scott:US,

したがって、正しい選択肢は D)Duke,Scott,Duke,Scott, です。

前の問題へ SE17_B-12

次の問題へ SE17_B-14

対象資格:Java SE17 認定資格