Given the code fragments:



void doStuff() throws ArithmeticException, NumberFormatException, Exception {
    if (Math.random() > -1) throw new Exception ("Try again");
}

and

try {
    doStuff();
} catch (ArithmeticException | NumberFormatException | Exception e) {
    System.out.println(e.getMessage());
} catch (Exception e) {
    System.out.println(e.getMessage());
}

Which modification enables the code to print Try again?

A. Comment the lines 28, 29 and 30.
B. Replace line 26 with:

} catch (Exception | ArithmeticException | NumberFormatException e) {
C. Replace line 26 with:
} catch (ArithmeticException | NumberFormatException e) {
D. Replace line 27 with:
throw e;

題解

題目原先提供的程式會在第26行和第28行編譯錯誤。

第26行錯誤的原因在於,ArithmeticException和NumberFormatException均為Exception的子類別,重複包含了。

第28行錯誤的原因在於,第26行已經有catch到Exception了,所以永遠執行不到第26行。

要修正這個問題,可以把第26行的Exception拿掉,因此答案是選項C。