问题

我正在审查一些新代码。该程序只有一个try和一个finally块。由于catch块被排除在外,如果遇到异常或任何可抛出的东西,try块如何工作?它只是直接进入finally块吗?


#1 热门回答(103 赞)

如果try块中的任何代码都可以抛出已检查的异常,则它必须出现在方法签名的throws子句中。如果抛出未经检查的异常,则会冒出该方法。

无论是否抛出异常,都始终执行finally块。


#2 热门回答(80 赞)

关于ontry / finally的一个小注释:除非,否则将始终执行

  • 调用System.exit()。
  • JVM崩溃了。
  • try {}块永远不会结束(例如无限循环)。

#3 热门回答(32 赞)

Java语言规范(1)描述了如何执行5668366452。没有捕获相当于没有捕获能够捕获给定的Throwable。

如果try块的执行由于抛出值V而突然完成,那么有一个选择:如果V的运行时类型可以赋值给try语句的任何catch子句的参数,那么...... ... If V的运行时类型不能分配给try语句的任何catch子句的参数,然后执行finally块。然后有一个选择:如果finally块正常完成,那么try语句因为抛出值V而突然完成。如果finally块因为S而突然完成,那么try语句突然完成原因S(和抛出值V被丢弃并被遗忘)。
(1)Execution of try-catch-finally


原文链接