Есть ли такой случай, когда в 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 для цели очистки.