在Java中,我有一个方法捕获一个扩展'NewException'的异常'ChildException' . 如果该方法调用另一个抛出'NewException'的方法,让我们说某事发生并抛出它;捕获抛出异常的子类的调用方法会捕获它吗?
public MethodCatchingChildException
{
try
{
//stuff
callingMethodThrowingNewException();
//stuff
}
catch (ChildException e)
{
//stuff
}
}
那么,在MethodCatchingChildException中是否会捕获来自callingMethodThrowingNewException的异常?
3 回答
catch
子句将捕获与声明的异常类型赋值兼容的任何异常 . 在您描述的情况下,NewException
的实例(不是ChildException
将不会被catch
子句捕获,因为您无法将NewException
对象分配给ChildException
变量 .规则在section 14.20.1 of the Java Language Specification中详细说明:
把它想象成一个测试实例
例如
所以指定一个类类型将捕获该类及其子类 .
它只会捕获您指定的Exception或它的子类 . 只需编写它就可以捕获父Exception并且您是安全的 .