Besteht die Möglichkeit, dass ein finally Block nicht ausgeführt wird?

8

Wir wissen, dass unabhängig davon, ob eine Ausnahme ausgelöst oder abgefangen und behandelt wird, der finally Block ausgeführt wird. Also war ich neugierig, dass es irgendeine Möglichkeit gibt, dass der Block schließlich nicht ausgeführt wird.

Und wenn System.exit () entweder in try oder catch aufgerufen wird, wird auch das schließlich aufgerufen?

    
GuruKulki 10.03.2010, 15:11
quelle

8 Antworten

21
  

Wenn die JVM beendet wird, während der Code try oder catch ausgeführt wird, wird der Block finally möglicherweise nicht ausgeführt. Wenn der Thread, der den try - oder catch -Code ausführt, unterbrochen oder gelöscht wird, wird der finally -Block möglicherweise nicht ausgeführt, obwohl die Anwendung insgesamt fortgesetzt wird.

Quelle: java.sun.com: Java-Lernprogramm: Der endgültige Block

    
Daniel Vassallo 10.03.2010, 15:13
quelle
6

System.exit() verhindert die Ausführung eines finally Blocks.

    
msw 10.03.2010 15:14
quelle
3

In der Java-Dokumentation:

Ссылка

Es erklärt schließlich sehr gut.

Sie beachten, dass, wenn die JVM beendet wird, der endgültige Block nicht aufgerufen wird. Oder wenn ein Thread, der den Codeblock ausführt, getötet wird, wird der finally-Block nicht aufgerufen. In allen anderen Fällen wird es.

    
MarkPowell 10.03.2010 15:13
quelle
2

Eine Sache, an die ich gerade denken kann, ist OutOfMemoryError . In diesem Fall besteht die Möglichkeit, dass kein weiterer Code in Ihrer App ausgeführt werden kann.

    
alex.zherdev 10.03.2010 15:14
quelle
2
%Vor%

Dies gibt Ihnen die Ausgabe:

%Vor%     
Joset 10.03.2010 15:25
quelle
1

System.exit (1); Sie können

verwenden     
giri 10.03.2010 15:25
quelle
0

Wenn einige Java Native Interface-Methoden segfaults (eine Bibliotheksfunktion außerhalb von Java, aber von dort abstürzt), wird auch eine finally-Methode nicht aufgerufen, weil die gesamte JVM aufhört.

Fehler in der JVM selbst führen ebenfalls zu einem Absturz und verhindern die weitere Ausführung.

    
extraneon 10.03.2010 15:23
quelle
0

Die finally-Klausel im try-catch-Ausnahmeblock wird immer ausgeführt, unabhängig vom Auftreten einer Ausnahme im normalen Java-Programmablauf. Wenn der Ausführungsfluss vor der finally-Klausel gestoppt wird, wird der finally-Block nicht ausgeführt.

Wir können System.exit(1); verwenden, bevor wir den Ausführungsablauf des Programms endgültig blockieren und stoppen.

    
Prashant Lokhande 19.09.2015 09:42
quelle

Tags und Links