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

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

問題

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

public class Main {
	public static void main(String... args) {
		SubItem item = new SubItem();
		item.setName(args);
		System.out.println(item);
	}
}

class Item {
	private String name;

	public String getName() {
		retrun name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String toString() {
		return getName();
	}
}

class SubItem extends Item {
	public void setName(String name) {
		super.setName("¥" + name + "¥");
	}

	public void setName(String[] nameParts) {
		var output = format(nameParts);
		setName(output);
	}

	private String format(String[] parts) {
		var sb = new StringBuilder();
		for (String part : parts) {
			sb.append(part).append(' ');
		}
		return sb.toString();
	}
}

なお、コードの実行には以下のコマンドを使用するものとする。

$ java Main Duke Scott Sakila

選択肢

A)¥Duke Scott Sakila ¥ が出力される

B)Duke Scott Sakila ‘ が出力される

C)NullPointerException がスローされる

D)” ” が出力される

E)何も出力されない

F)ArrayIndexOutOfBoundsException がスローされる

G)”Duke Scott Sakila ” が出力される

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

解答

A)¥Duke Scott Sakila ¥ が出力される

B)Duke Scott Sakila ‘ が出力される

C)NullPointerException がスローされる

D)” ” が出力される

E)何も出力されない

F)ArrayIndexOutOfBoundsException がスローされる

G)”Duke Scott Sakila ” が出力される

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

解説

実行の流れ

  1. メインメソッドの実行:
    • SubItem item = new SubItem();SubItem のインスタンスを作成。
    • item.setName(args);args(コマンドライン引数、ここでは ["Duke", "Scott", "Sakila"])を渡します。
  2. メソッド呼び出し:
    • SubItemsetName(String[] nameParts) メソッドが呼び出され、配列を受け取ります。
    • format(nameParts) メソッドが呼ばれ、配列の要素を結合して文字列を生成します。
  3. setName(String name) メソッド:
    • 最後に、super.setName("¥" + name + "¥") が呼ばれ、Item クラスの setName メソッドが実行されます。
  4. toString メソッド:
    • System.out.println(item);toString() メソッドが呼ばれ、最終的に getName() を返します。

コンパイルエラーの原因

  • Item クラスの getName() メソッドで retrun という誤字があるため、コンパイルエラーが発生します。この部分は正しくは return でなければなりません。

結論

修正を加えない限り、コンパイルエラーが発生するため、選択肢 H)コンパイルエラーになる が正しいです。

前の問題へ SE17_B-16

次の問題へ SE17_B-18

対象資格:Java SE17 認定資格