Ich habe das obige Beispiel mit geringfügigen Änderungen ausprobiert-
public static void main(final String[] args) {
System.out.println(test());
}
public static int test() {
int i = 0;
try {
i = 2;
return i;
} finally {
i = 12;
System.out.println("finally trumps return.");
}
}
Der obige Code gibt aus:
finally trumps return.
2
Dies liegt daran, dass bei Ausführung von return i;
der Wert von i
2 beträgt. Danach wird der finally
-Block ausgeführt, in dem 12 an i
zugewiesen wird und dann System.out
ausgeführt wird.
Nach Ausführung des finally
-Blocks gibt der try
-Block 2 zurück, anstatt 12 zurückzugeben, da diese return
-Anweisung nicht erneut ausgeführt wird.
Wenn Sie diesen Code in Eclipse debuggen, wird der Eindruck entstehen, dass nach Ausführung von System.out
des finally
-Blocks die return
-Anweisung des try
-Blocks erneut ausgeführt wird. Dies ist jedoch nicht der Fall. Es gibt einfach den Wert 2 zurück.
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!