假设我们有以下方法(一个非常简化的版本):
void doSomething() {
try {
throw new Exception("A");
} finally {
throw new Exception("B");
}
}
消息“ B”的异常被调用方方法捕获。基本上,如果finally块也抛出某些异常,是否有办法知道在try块中引发了哪个异常?假设方法doSomething()无法修改。
JLS的14.20.2节规定:
如果由于抛出值V而导致try块的执行突然完成,则...
...
如果finally块由于原因S突然完成,则try语句由于原因S突然完成(并且值V的抛出被丢弃并忘记了)。
Java必须丢弃原始异常V
(“突然完成”),并且整个try-finally块将使用S
(finally
Exception
“ B”)“突然完成”。
无法检索与JLS中try
对应的原始块异常“ A” V
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句