Я готовлюсь к тесту в объектно-ориентированном программировании, и мне было интересно, есть ли какой-нибудь случай, если учесть следующий код:
try { do something } catch (someException e) { } finally { do something }
блок finally не будет выполнен?
finally
Да. Если вы потерпели крах Java VM или иным образом испортили вещи через собственный код, вызвали завершение программы или бесконечный цикл / ожидание внутри блока try.
try
Это только три случая, которые не позволят выполнить блок finally.
Если вы позвоните System.exit(0) в try. Или сделайте что-нибудь, что заставит JVM выйти или зависнуть (как в тупике). В противном случае - нет.
System.exit(0)
Спецификация языка Java гарантирует , что в конечном итоге вызывается до завершения инструкции try.
Оператор try может не завершиться по обычным причинам, перечисленным в ответе Бореалида.
Блок finally обязательно будет выполнен, если элемент управления выйдет из блока try или catch. Если вам как-то удается остановить управление, чтобы выйти из этих блоков:
путем написания оператора выхода или
бесконечный цикл и т. Д.
тогда блок finally не будет выполнен. Обычно мы пишем блок finally для цели " cleanup ".