如果Java继承了另一个异常,它会多次捕获一个异常吗?
鉴于这些类别:如果Java继承了另一个异常,它会多次捕获一个异常吗?,java,inheritance,exception-handling,Java,Inheritance,Exception Handling,鉴于这些类别: public static class SuperException extends Exception { } public static class MyException extends SuperException { } 这在运行时发生: try{ throw new MyException(); } catch (MyException e) { catcher1(); } catch (SuperException e) { catcher2
public static class SuperException extends Exception {
}
public static class MyException extends SuperException {
}
这在运行时发生:
try{
throw new MyException();
} catch (MyException e) {
catcher1();
} catch (SuperException e) {
catcher2();
}
将调用哪些方法?就第一个?二者都它对我编写catch块的顺序有什么影响吗?只是第一个(catcher1
)。执行第一个匹配的捕获
块,其他块不执行
对于问题中的代码,第二个
catch
块不可访问且无法编译。但是,如果您的try
块包含可能引发MyException
的代码,以及可能引发非MyException
的SuperException
的超级异常的代码,并且如果您希望以与SuperException
不同的方式处理MyException
,则可以同时处理这两个块(您可能希望它们按此顺序排列)。任何合适的IDE都会警告您第二个捕获不可访问。第一个捕获当然是不必要的,因为运行时类型是MyException
,另一个是不必要的,它总是捕获第一个也是最具体的,这就是为什么您不能按相反的顺序编写异常。