class SpecialException extends Exception {
public SpecialException(String message) {
super(message);
System.out.println(message);
}
}
public class ExceptionTest {
public static void main(String[] args) {
try {
doSomething();
} catch (SpecialException e) {
System.out.println(e);
}
}
static void doSomething() throws SpecialException {
int[] ages = new int[4];
ages[4] = 17;
doSomethingElse();
}
static void doSomethingElse() throws SpecialException {
throw new SpecialException("Thrown at end of doSomething() method");
}
}
What will be the output?
A.
SpecialException: Thrown at end of doSomething() method
B.
Error in thread "main" java.lang.ArrayIndexOutOfBoundsError
C.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at ExceptionTest.doSomething(ExceptionTest.java:13)
at ExceptionTest.main(ExceptionTest.java:4)
at ExceptionTest.doSomething(ExceptionTest.java:13)
at ExceptionTest.main(ExceptionTest.java:4)
D.
SpecialException: Thrown at end of doSomething() method
at ExceptionTest.doSomethingElse(ExceptionTest.java:16)
at ExceptionTest.doSomething(ExceptionTest.java:13)
at ExceptionTest.main(ExceptionTest.java:4)
at ExceptionTest.doSomethingElse(ExceptionTest.java:16)
at ExceptionTest.doSomething(ExceptionTest.java:13)
at ExceptionTest.main(ExceptionTest.java:4)
題解
程式會在第19行拋出ArrayIndexOutOfBoundsException,再從main方法繼續向外拋出,導致執行緒產生例外中斷。因為ArrayIndexOutOfBoundsException並不是SpecialException的子類別,因此無法被第13行的catch接住。