如果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
,另一个是不必要的,它总是捕获第一个也是最具体的,这就是为什么您不能按相反的顺序编写异常。