Есть ли такой случай, когда в try\finally блок, наконец, не будет выполнен?

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

try {
    do something
} catch (someException e) {

} finally {
    do something
}

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

  • написав инструкцию выхода, или

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

тогда блок finally не будет выполнен. Как правило, мы пишем блок finally для цели очистки.