Операторы 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