Durch das Lesen aller Fragen bereits in diesem Forum im Zusammenhang mit dem oben genannten Thema (siehe Titel) gestellt, verstehe ich sehr gut, dass finally
immer aufgerufen wird. (außer von System.exit
und Endlosschleifen). Ich würde jedoch gerne wissen, ob ein return
in einem catch-Block aufgerufen wird und dann ein weiterer return
vom finally-Block aufgerufen wird.Try-catch-finally-return Klärung
Zum Beispiel:
public static void main(String[]args) {
int a = new TestClass().absorbeTheValue();
}
int absorbeTheValue() {
try {
int a = 10/0;
if (a > 0) return 4;
} catch(Exception e) {
return 45;
} finally {
return 34;
}
}
Also hier der Ausgang (wenn die Methode aufgerufen wird) wird 34 in jedem Fall sein. Es bedeutet, dass schließlich immer ausgeführt wird. Ich denke aber, dass die anderen "Returns" überhaupt nicht laufen. In vielen Beiträgen fand ich die Tatsache, dass endlich der Inhalt über das geschrieben wurde, was schon durch die Rückgabeklausel geschrieben wurde. Mein Verständnis ist, dass, sobald der Rückgabewert in der catch-Klausel evaluiert wird, der Kontrollfluss an die finally-Klausel übergeben wird, die wiederum eine weitere Rückgabe hat, diesmal wird die Rückgabe ausgewertet, ohne die Kontrolle an die catch-Klausel zurückzugeben . Auf diese Weise wird die einzige zur Laufzeit aufgerufene return
die endgültige Rückkehr sein. Sind Sie einverstanden (damit?
Ein return
in finally
gibt das Steuerelement nicht an das Programm zurück, aber gibt den Wert zurück und beendet die Methode. Können wir das sagen?
einrücken Code bitte. –
Siehe auch: http://stackoverflow.com/questions/65035/in-java-does-return-trump-finally –
Was ist Ihre Frage? – thiagoh