Ich bin schrecklich spät dran, um hier zu antworten, aber ich bin überrascht, dass niemand die Java-Debugger-Option erwähnt hat, einen Stack-Frame zu löschen. Ich benutze diese Funktion in IntelliJ sehr häufig. (Ich bin sicher Eclipse und NetBeans unterstützen die gleiche Funktion).
Wenn ich einen Stack-Frame aus einem Try- oder Catch-Block fallen lasse, auf den ein Finally-Block folgt, wird die IDE mich dazu auffordern: "Soll ich den finally-Block ausführen?" Offensichtlich ist dies eine künstliche Laufzeitumgebung - ein Debugger!
Um Ihre Frage zu beantworten, würde ich sagen, Sie können nur garantieren, dass es läuft, wenn ignorieren, wenn ein Debugger angeschlossen ist, und (wie andere gesagt) Methode something()
ruft nicht (a) die Java-Methode System.exit(int)
oder (b) C-Funktion exit(int)
/ abort()
über JNI oder (c) etwas Verrücktes tun wie den Aufruf kill -9 $PID
auf sich selbst(!).
672 Stimmen
Wenn dies nicht der Fall ist, sollte das Schlüsselwort wie folgt lauten
probably
stattdessen.61 Stimmen
Nicht siempre
3 Stimmen
Effektives Java sagt etwas anderes informit.com/articles/article.aspx?p=1216151&seqNum=7
38 Stimmen
@BinoyBabu, Abschlussbericht !=
finally
; Abschlussbericht \== diefinalize()
Methode.5 Stimmen
@Boann Richtig, "nicht immer" in der Tat. Aber dann können Sie nie und nimmer die Worte "garantiert" oder "immer" verwenden.
2 Stimmen
@Boann Ich würde es so formulieren: Der Ausführungsfluss geht immer durch finally, bevor er die try-finally-Struktur verlässt. Wenn er darin stirbt, ist das für mich in Ordnung, denn der Hauptzweck von finally ist es, sicherzustellen, dass die Dinge für andere Teile des Codes nicht durcheinander gebracht werden.
0 Stimmen
Sieht aus, als hättest du da einen ganz schönen Fisch gefangen!
0 Stimmen
Wenn die
finally
Block einen Wert zurückgibt, dann kann der try/catch-Block nicht zurückkehren.0 Stimmen
@NoonSilk Das war saukomisch!