尝试/最后没有捕获和返回值
这个问题在这里已经有了答案:
来自JLS(强调我的):
如果try块的执行由于抛出一个值V而突然完成,那么有一个选择:
[...]
如果V的运行时类型不是与try语句的任何catch子句的可捕获异常类分配兼容的,则执行finally块。 然后有一个选择:
如果finally块正常完成,那么try语句突然完成,因为抛出了值V.
如果因为S原因finally块突然完成,那么try语句因S原因突然完成( 并丢弃并丢弃值V的抛出 )。
TL / DR
这意味着,如果你return
的内finally
没有抛出异常块,该方法返回。
/ TL / DR
除了return
之外,还有其他可能导致finally
块突然完成而忘记异常的状态。 它们在JLS第14.1节中定义。 基本上,它是break
, continue
, return
或异常(抛出或由语句/方法引起)。 完成try/catch/finally
块然后完成这个原因。
在try/catch/finally
的规范中还有更多的情况,特别是如果没有异常或匹配的catch子句存在。 归结到一点, finally
打败catch
次try
。
当抛出异常时, 它将首先通过finally
块。
如果你的finally
块没有返回或抛出任何东西,那么传递原始异常。
如果你的finally
块返回一个值, 那么这个异常就不再传播了。
最后看看try catch的执行情况。
从Java语言规范-jls-14.20.2
如果V的运行时类型不是与try语句的任何catch子句的可捕获异常类分配兼容的,则执行finally块。 然后有一个选择:
如果finally块正常完成,那么try语句突然完成,因为抛出了值V.
如果因为S原因finally块突然完成,那么try语句因S原因突然完成( 并丢弃并丢弃值V的抛出 )。
链接地址: http://www.djcxy.com/p/73693.html上一篇: try/finally without catch and return value
下一篇: java