2010-08-14 6 views
13

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

try { 
    do something 
} catch (someException e) { 

} finally { 
    do something 
} 

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

+13

Вытягивание вилки должно быть выполнено. – PreciousBodilyFluids

+5

http://thedailywtf.com/Articles/My-Tales.aspx –

ответ

17

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

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

+3

Вызов System.exit или поворот компьютера, вероятно, считается «причиной завершения программы» ... :-) –

+0

@Rasmus Kaj: Согласен. – Borealid

+0

Если в блоке try вы возвращаетесь из функции, содержащей эту фразу try/catch/finally, будет ли блок finally еще выполненным? – euphoria83

5

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

+0

JNI, вероятно, мог бы, однако. –

2

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

Заявление о попытке может быть выполнено не по обычным причинам, которые перечислены в ответе Бореалида.

+1

"наконец-то вызывается перед завершением try-statement" ??? не должен «раньше» быть «когда» –

+2

Команда try * * состоит из try-* block *, любых блоков catch и, возможно, окончательного блока. – meriton

0

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

  • написав заявление на выход, или

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^