将捕获异常捕获该异常的父类
在Java中,我有一个方法捕获一个扩展'NewException'的异常'ChildException'。如果该方法调用另一个抛出'NewException'的方法,并让我们说发生了什么并抛出它;将捕获抛出的异常的子类的调用方法捕获它吗?将捕获异常捕获该异常的父类
public MethodCatchingChildException
{
try
{
//stuff
callingMethodThrowingNewException();
//stuff
}
catch (ChildException e)
{
//stuff
}
}
那么调用MethodThrowingNewException的异常会在MethodCatchingChildException中被捕获吗?
A catch
子句将捕获与异常的声明类型分配兼容的任何异常。在这种情况下你描述的NewException
实例(这不是一个ChildException
不会受catch
子句捕获,因为你不能一个NewException
对象分配给ChildException
可变
的规则在section 14.20.1 of the Java Language Specification阐明:
如果try块的执行突然完成,因为值V的抛,然后有一个选择:
如果V的运行时类型是分配COMPAT可以使用(§5.2)try语句的任何catch子句的可捕获异常类,然后选择第一个(最左边的)这样的catch子句。的值V被分配给所选择的catch子句的参数,并且执行该catch子句的块,然后有一个选择:
如果块正常完成,则try语句正常完成。
如果该块由于任何原因突然完成,则由于相同的原因,try语句突然完成。
如果V的运行时类型不是分配与可捕获的异常类try语句中的任何catch子句的兼容,那么try语句突然结束,因为该值V.
的抛它
它只会捕获您指定的异常或它的子类。只需编写它,以便捕获父异常,并且您很安全。
想作为一个的instanceof测试
例如
if (e instanceof ChildException) {
...
}
因此指定一个类的类型将捕获类和它的子类。
你有它向后。抓住父母会抓住孩子,但不是相反。 – 2014-09-29 16:07:28
我很抱歉,但你可以只写代码,看看结果 – sotcha 2014-09-29 16:10:44
好吧,其实我不能在哪里。这就是我在这里问的原因。我正在研究一些不属于我的代码,无法编译。 – 2014-09-29 16:14:56