In diesem Code wird someVar
gesetzt, auch wenn der catch-Block ausgeführt wird und die zweite Ausnahme ausgelöst wird?
public void someFunction() throws Exception {
try {
//CODE HERE
} catch (Exception e) {
Log.e(TAG, "", e);
throw new Exception(e);
} finally {
this.someVar= true;
}
}
Antworten:
Ja, die finally-Blöcke werden immer ausgeführt ... außer wenn:
System.exit(0);
Wenn eine Methode in Ihrem finally-Block eine nicht erfasste Ausnahme auslöst, wird danach nichts mehr ausgeführt (dh die Ausnahme wird wie in jedem anderen Code ausgelöst). Ein sehr häufiger Fall, in dem dies geschieht, ist
java.sql.Connection.close()
.Abgesehen davon vermute ich, dass das von Ihnen verwendete Codebeispiel nur ein Beispiel ist, aber achten Sie darauf, dass die tatsächliche Logik nicht in einen finally-Block eingefügt wird. Der finally-Block ist für die Bereinigung von Ressourcen (Schließen von DB-Verbindungen, Freigeben von Dateihandles usw.) vorgesehen, nicht für die Logik, die ausgeführt werden muss. Wenn es ausgeführt werden muss, tun Sie es vor dem Try-Catch-Block, weg von etwas, das eine Ausnahme auslösen könnte, da Ihre Absicht mit ziemlicher Sicherheit funktional dieselbe ist.
quelle
finally
wird dann in Form von normalen und abrupten Abbrüchen angegeben.Ja.
Siehe die Dokumentation :
Ausnahmen:
quelle
Schließlich wird der Block immer ausgeführt.
}}
quelle
Schließlich wird immer ausgeführt, egal was Ihr Fall ist, dh
Für ungeprüfte Ausnahmen schreibt Java keine Fehlerbehandlung vor. Aus diesem Grund wird der unter diesem Punkt (an dem der Fehler aufgetreten ist) geschriebene Code nicht ausgeführt, wenn im finally-Block eine ungeprüfte Ausnahme auftritt und dann keine Behandlung durchgeführt wird.
Daher schlage ich vor, immer alle Ausnahmen zu behandeln, wenn diese aktiviert oder deaktiviert sind. Auf diese Weise können Sie sicherstellen, dass der Codeblock in finally auch ausgeführt wird, unabhängig davon, ob auch eine nicht aktivierte Ausnahme auftritt. Sie haben einen Platz in Fangunter Nest und schließlich blockieren Ihre notwendige Arbeit zu erledigen.
quelle
Der finally-Block wird immer ausgeführt, wenn der try-Block beendet wird, es sei denn, Sie haben System.exit (0) in Ihrem try oder catch.
quelle
Ja.
finally
Block wird immer ausgeführt, außer in dem Fall, in dem Sie System.exit () aufrufen, da Java VM gestoppt wird.quelle