問題
次のコード断片の//[ A ]の部分に記述するとコンパイルエラー、または実行時に例外がスローされるものはどれですか。(3つ選択)
Main.java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String... args) {
Student[] students = { new Student("Duke"), new Student("Scott"), new Student("Sakila") };
List<Student> list = new ArrayList<>();
for (Student s : students) {
list.add(s);
}
//[ A ]
}
}
Student.java
record Student(String name) {}
選択肢
A) list.set(3, new Student("Candy"));
B) list.add(new Student("Duke"));
C) list.add(new Student(null));
D) list.add(null);
E) list.add(0, new Student(""));
F) list.add(new Student());
G) list.add("Candy");
H) list.set(1, new Student("Wendy"));
解答
A) list.set(3, new Student("Candy"));
B) list.add(new Student("Duke"));
C) list.add(new Student(null));
D) list.add(null);
E) list.add(0, new Student(""));
F) list.add(new Student());
G) list.add("Candy");
H) list.set(1, new Student("Wendy"));
解説
A)list.set(3, new Student(“Candy”));
→ 実行時に IndexOutOfBoundsException
がスローされます。list
には 3 つの要素しか存在しないため、index 3
に対して set
操作を行うと例外が発生します。list.size()
が3なので、set
は index 2
までしか有効ではありません。
B)list.add(new Student(“Duke”));
→ エラーになりません。list
に新しい Student("Duke")
を追加することは問題ありません。
C)list.add(new Student(null));
→ エラーになりません。Student
の name
フィールドに null
を渡すことは許可されています。実行時にエラーは発生しません。
D)list.add(null);
→ エラーになりません。ArrayList
は null
要素を追加することが可能です。
E)list.add(0, new Student(“”));
→ エラーになりません。list
の先頭に空文字列の Student
オブジェクトを追加することは可能です。
F)list.add(new Student());
→ コンパイルエラーになります。Student
は record
で定義されているため、デフォルトのコンストラクタは存在しません。new Student()
はコンパイルエラーになります。
G)list.add(“Candy”);
→ コンパイルエラーになります。list
は List<Student>
型であり、文字列 "Candy"
を追加することは型の不一致によりコンパイルエラーになります。
H)list.set(1, new Student(“Wendy”));
→ エラーになりません。index 1
に新しい Student("Wendy")
を set
することは有効です。
対象資格:Java SE17 認定資格