break和continue语句最终导致了Nashorn中的块执行

break and continue statements are causing finally block execution in Nashorn

本文关键字:Nashorn 执行 continue 语句 break      更新时间:2023-09-26

我很困惑为什么finallybreak/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

我已经尝试在浏览器中执行相同的代码(用console.log()替换print()

)

输出与Firebug

中的预期一致
Try 1
Try 2
Finally executed

我在这里找到了相关的语句:

. .虽然finally总是被执行,但try中的某些语句,如continue, break, return,或者当发生错误并且没有catch子句时,都将导致finally紧随其后立即执行. .

但是我没有看到这在Firefox中发生(可能有一个很好的理由)

在Java 8u60中修复,将于2015年7月14日发布https://wiki.openjdk.java.net/pages/viewpage.action?pageId=22937606