Есть ли такой случай, когда в блоке try \ finally не будет выполнен finally? - PullRequest
13 голосов
/ 14 августа 2010

Я готовлюсь к тесту в объектно-ориентированном программировании, и мне было интересно, есть ли какой-нибудь случай, если учесть следующий код:

try {
    do something
} catch (someException e) {

} finally {
    do something
}

блок finally не будет выполнен?

Ответы [ 4 ]

17 голосов
/ 14 августа 2010

Да. Если вы потерпели крах Java VM или иным образом испортили вещи через собственный код, вызвали завершение программы или бесконечный цикл / ожидание внутри блока try.

Это только три случая, которые не позволят выполнить блок finally.

5 голосов
/ 14 августа 2010

Если вы позвоните System.exit(0) в try. Или сделайте что-нибудь, что заставит JVM выйти или зависнуть (как в тупике). В противном случае - нет.

2 голосов
/ 15 августа 2010

Спецификация языка Java гарантирует , что в конечном итоге вызывается до завершения инструкции try.

Оператор try может не завершиться по обычным причинам, перечисленным в ответе Бореалида.

0 голосов
/ 02 августа 2015

Блок finally обязательно будет выполнен, если элемент управления выйдет из блока try или catch. Если вам как-то удается остановить управление, чтобы выйти из этих блоков:

  • путем написания оператора выхода или

  • бесконечный цикл и т. Д.

тогда блок finally не будет выполнен. Обычно мы пишем блок finally для цели " cleanup ".

...