2010-08-14 13 views

Odpowiedz

17

Tak. Jeśli nastąpi awaria maszyny wirtualnej Java lub w inny sposób zakopiemy zawartość za pomocą natywnego kodu, spowoduje to zakończenie programu lub nieskończoną pętlę/oczekiwanie w bloku try.

Są to jedyne trzy przypadki, które pozwolą uniknąć wykonania bloku finally.

+3

Wywołanie System.exit lub przekręcenie komputera prawdopodobnie będzie się liczyło "ponieważ program się zakończy" ... :-) –

+0

@Rasmus Kaj: Zgoda. – Borealid

+0

Jeśli w bloku try powrócisz z funkcji zawierającej tę frazę try/catch/finally, czy blok finally będzie nadal wykonywany? – euphoria83

5

Jeśli zadzwonisz pod numer System.exit(0) w try. Albo stwórz coś, co sprawia, że ​​JVM przestaje działać lub zawiesza się (jak impas). W przeciwnym razie - nie.

+0

JNI prawdopodobnie. –

2

Specyfikacja języka Java guarantees, która jest ostatecznie wywoływana przed zakończeniem instrukcji try.

Instrukcja try może nie być kompletna z powodów typowych, które wymieniono w odpowiedzi Borealid.

+1

"w końcu jest wywoływana przed zakończeniem instrukcji try" ??? nie powinno być "przed" być "gdy" –

+2

Instrukcja try- * składa się z try- * bloku *, dowolnych bloków catch i opcjonalnie finally-block. – meriton

0

Ostatecznie blok zostanie definitywnie wykonany, jeśli kontrola zostanie wydana przez try lub catch catch. Jeśli jakiś sposób udało się zatrzymać kontrolę wyjdzie z tych bloków:

  • pisząc oświadczenie wyjścia, albo

  • nieskończonej pętli itp

wtedy wreszcie blok nie zostać straconym. Generalnie piszemy blok finally dla celów "cleanup".

Powiązane problemy