Der finally-Block wird in einigen wenigen Fällen nach der Rückkehr nicht aufgerufen: wenn System.exit() zuerst aufgerufen wird oder wenn die JVM abstürzt.
Lassen Sie mich versuchen, Ihre Frage auf möglichst einfache Weise zu beantworten.
Regel 1 : Der finally-Block wird immer ausgeführt (Es gibt zwar Ausnahmen, aber halten wir uns erst einmal daran).
Regel 2 Die Übergabe der Kontrolle kann als Ergebnis der normalen Ausführung, der Ausführung einer break-, continue-, goto- oder return-Anweisung oder der Auslösung einer Ausnahme erfolgen.
Im Falle einer Return-Anweisung muss die Kontrolle die aufrufende Methode verlassen und ruft daher den finally-Block der entsprechenden try-finally-Struktur auf. Die return-Anweisung wird nach dem finally-Block ausgeführt.
Falls es im finally-Block auch eine return-Anweisung gibt, wird diese definitiv die im try-Block anstehende Anweisung überschreiben, da sie den Aufrufstapel löscht.
Eine bessere Erklärung finden Sie hier: http://msdn.microsoft.com/en-us/ .... ist das Konzept in allen Hochsprachen weitgehend gleich.
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!