我很困惑为什么在finally
/ break
之后continue
被执行(版本:Java 8更新5)
testTryFinally();
function testTryFinally()
{
try
{
print("Try 1");
for(var i = 0; i < 2; i++)
{
break;
}
print("Try 2");
}
finally
{
print("Finally executed");
}
}
执行:
.../tmp>jjs test.js
使用break
输出:
Try 1
Finally executed
Try 2
Finally executed
使用continue
代替break
Try 1
Finally executed
Finally executed
Try 2
Finally executed
我尝试在浏览器中执行相同的代码(将print()
替换为console.log()
输出与Firebug中的预期一样
Try 1
Try 2
Finally executed
答案 0 :(得分:4)
我找到了相关声明here:
即可。 。 虽然如果已定义,
finally
将始终执行,try
内的某些语句,例如continue
,break
,{{1}或者,当发生错误并且没有catch子句时,所有这些都会导致return
之后立即执行。 。 强>
但我不会在Firefox中看到这种情况(可能是有充分理由的)
答案 1 :(得分:1)
已于2015年7月14日到期的Java 8u60中修复 https://wiki.openjdk.java.net/pages/viewpage.action?pageId=22937606