3

我很困惑为什么在/finally之后被执行(版本:Java 8 update 5)breakcontinue

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
4

2 回答 2

4

我在这里找到了相关声明:

. . . 确实finally,如果定义了总是会执行,但内部的某些语句,try例如continue, break, return,或者当发生错误并且没有 catch 子句时,都将导致finally其后立即执行。. .

但我没有看到在 Firefox 中发生这种情况(可能有充分的理由)

于 2014-07-13T04:40:24.870 回答
1

在 2015 年 7 月 14 日到期的 Java 8u60 中已修复 https://wiki.openjdk.java.net/pages/viewpage.action?pageId=22937606

于 2015-07-10T21:10:17.593 回答