Exception handling customException未捕获RuntimeException

Exception handling customException未捕获RuntimeException,exception-handling,runtimeexception,Exception Handling,Runtimeexception,为什么运行时异常不能被我的自定义异常捕获 class MyException extends Exception { } public class ExceptionTest { public static void main(String[] args) { try { doSomething(); } catch (MyException e) { System.out.println("I shoul

为什么运行时异常不能被我的自定义异常捕获

class MyException extends Exception { }

public class ExceptionTest {
    public static void main(String[] args) {
        try {
            doSomething();
        } catch (MyException e) {
            System.out.println("I should be here....");
        }
    }
    static void doSomething() throws MyException {
        int[] ages = new int[1];
        ages[2] = 17;   // It throws a RuntimeException (ArrayIndexOufOfBoundsException)
    }
}
我会说,我应该得到信息:“我应该在这里……” 因为我的异常“MyException”扩展了exception类。 RuntimeException是异常的一个子类

为什么MyException没有捕获RuntimeException


提前谢谢你

“扩展”在Java中定义继承,即您不修改或扩展异常类,而是创建一个新的子类。RuntimeException根本不是MyException。你好,Eugene,谢谢你的回答。在这种情况下,这意味着,例如,我不能创建自己的异常,它包含一组基于java异常层次结构的异常?例如:“类MyException扩展了IndexOutOfBoundsException”->我想我也可以用自定义异常捕获每个“子”异常。例如这里的IndexOutOfBoundsException的子类:ArrayIndexOutOfBoundsException和StringIndexOutOfBoundsException。如果不是这样,那么如何处理自定义异常?是的,你的特例主要是供你自己使用的。如果您创建MyDataOOBException(它是IndexOutOfBoundsException的子类),任何捕获IndexOutOfBoundsException的代码(您的代码或第三方代码)也将捕获您的异常,但只有您知道MyDataOOBException类中有什么特别之处。您可以做的是捕获异常,然后检查实际异常的类型并采取相应的行动(如果您不处理异常,请重新抛出异常,或者在内部处理异常)。非常感谢Eugene!