我是Java新手。谁能帮我解释一下,为什么捕获没有捕获MyException(扩展了ArrayIndexOutOfBoundsException)?
我的例子:

public class TestClass {
    public static void main(String[] args) {
        try{
            doTest();
        }
        catch(MyException me){
            System.out.println("MyException is here");
        }
    }

    static void doTest() throws MyException{
        int[] array = new int[10];
        array[10] = 1000;

    }


}
class MyException extends ArrayIndexOutOfBoundsException {
    public MyException(String msg){
     super(msg);
    }
}


结果是:
“线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:10在TestClass.doTest(TestClass.java:14)在TestClass.main(TestClass.java:5)”

为什么没有“ MyException在这里”?

最佳答案

您在混淆subtype-supertype-relationship。

代码本身会引发ArrayIndexOutOfBoundsException,但不会引发MyException。捕获后者将不起作用,因为AIOOBE不是ME。您的ME是AIOOBE的子类型。

另一方面,AIOOBE具有超类型:IndexOutOfBoundsException。如果对此具有catch子句,则将获得所需的行为,因为AIOOBE是IOOBE。

或者,您也可以自己扔我自己:throw new MyException(...)

10-08 01:39