Операторы break и continue вызывают, наконец, выполнение блока в Nashorn

Я озадачен почему 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

2 ответа

Решение

Я нашел соответствующее заявление здесь:

, , , Хотя это правда finally всегда будет выполняться, если определено, определенные операторы внутри try такие как continue, break, return, или когда произошла ошибка и отсутствует условие catch, все это приведет к finally быть исполненным сразу после этого . , ,

Но я не вижу, что это происходит в Firefox (вероятно, по уважительной причине)

Исправлено в Java 8u60 и выйдет 14 июля 2015 г. https://wiki.openjdk.java.net/pages/viewpage.action?pageId=22937606

Другие вопросы по тегам