問題
次のコードについて正しい説明はどれですか。
public class Main {
public static void main(String... args) {
try {
Integer[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i <= nums.length; ++i) {
System.out.print(nums[i] + " ");
}
} catch (NullPointerException e) {
System.out.println("catch:NPE");
} catch (OutOfMemoryError e) {
System.out.println("catch:OOME");
}
}
}
選択肢
A)Error クラスは catch ブロックに指定できないためコンパイルエラーになる
B)try ブロックで発生する可能性がある例外に対応した catch 句が定義されていないのでコンパイルエラーになる
C)コードをコンパイル、実行すると 1 2 3 4 5 6 7 8 9 10 が出力され、正常に終了する
D)RuntimeException は catrch ブロックに指定できないためコンパイルエラーになる
E)コードをコンパイル、実行すると 1 2 3 4 5 6 7 8 9 10 が出力され、java.lang.ArrayIndexOutOfBoundsException がスローされる
解答
A)Error クラスは catch ブロックに指定できないためコンパイルエラーになる
B)try ブロックで発生する可能性がある例外に対応した catch 句が定義されていないのでコンパイルエラーになる
C)コードをコンパイル、実行すると 1 2 3 4 5 6 7 8 9 10 が出力され、正常に終了する
D)RuntimeException は catrch ブロックに指定できないためコンパイルエラーになる
E)コードをコンパイル、実行すると 1 2 3 4 5 6 7 8 9 10 が出力され、java.lang.ArrayIndexOutOfBoundsException がスローされる
解説
for文の条件式で、i <= nums.lengthと、配列の要素数以上のアクセスを行なっているため、1 2 3 4 5 6 7 8 9 10 が出力され、java.lang.ArrayIndexOutOfBoundsException がスローされます。
対象資格:Java SE17 認定資格