在java中尝试catch-finally

Nik*_*hil 27 java try-catch try-catch-finally

在Java中,如果我们在try-catch-finally的try块中插入一个return语句,那么finally块是否会被执行?

Gab*_*gut 26

只有finally在您到达exit()之前调用时,才会执行一个块finally.该exit()调用将关闭JVM,因此不会运行任何后续代码行.

编辑:这不完全正确.有关其他信息,请参阅以下注释.

  • 至少有3个其他情况不执行`finally`块:1)如果try块或catch块进入无限循环,或者永远阻塞,2)如果某些东西(例如JNI bug)导致JVM崩溃,或者3)是否存在机器中断(电源故障,硬件错误等). (17认同)
  • @Stephen:#1不是真的有效.它没有失败执行,它还没有. (9认同)
  • 实际上,如果它处于真正的无限循环中,则除非机器发生故障,否则它将永远不会执行。 (2认同)

sta*_*ker 9

无论是否返回,finally块都将始终执行,或者在try块中抛出异常.

另请参见第14.19.2节"Java语言规范" 的try-catch-finally的执行