Was ist der Unterschied zwischen
try {
fooBar();
} finally {
barFoo();
}
und
try {
fooBar();
} catch(Throwable throwable) {
barFoo(throwable); // Does something with throwable, logs it, or handles it.
}
Ich mag die zweite Version besser, weil sie mir Zugang zum Throwable gibt. Gibt es einen logischen Unterschied oder eine bevorzugte Konvention zwischen den beiden Variationen?
Gibt es auch eine Möglichkeit, auf die Ausnahme aus der finally-Klausel zuzugreifen?
quelle
Throwable
aus demfinally
Block, weil es nicht könnte sein einThrowable
.Dies sind keine Variationen, sondern grundlegend verschiedene Dinge.
finally
wird immercatch
nur ausgeführt , wenn eine Ausnahme auftritt.quelle
Schließlich und Fangblöcke sind ganz anders:
So
unterscheidet sich von
bedeutend.
Wenn Sie einen Try-Block definieren, müssen Sie diesen definieren
Der folgende Code wäre also auch gültig:
quelle
try
wird verwendet, um eine Methode auszuführen, die eine Ausnahme auslösen kanncatch
wird verwendet, um diese Ausnahme zu "fangen"finally
wird für jede Bereinigung verwendet, die erforderlich ist, wenn diese Ausnahme abgefangen wird oder nichtquelle
Egal, was der finally-Block immer ausgeführt wird. Wenn also im Allgemeinen der finally-Block verwendet wird, wenn Sitzungen, Datenbankverbindungen oder Dateien oder Sockets geöffnet sind, wird der Code zum Schließen dieser Verbindungen platziert. Dies dient nur dazu, sicherzustellen, dass in einer Anwendung keine Speicherlecks oder andere Probleme auftreten.
quelle
Schließlich und Fangblöcke sind ganz anders:
Innerhalb des catch-Blocks können Sie auf die ausgelöste Ausnahme reagieren. Dieser Block wird nur ausgeführt, wenn eine nicht behandelte Ausnahme vorliegt und der Typ mit dem übereinstimmt oder eine Unterklasse des im Parameter des catch-Blocks angegebenen ist. Schließlich wird immer nach Try-and-Catch-Blöcken ausgeführt, ob eine Ausnahme ausgelöst wurde oder nicht.
quelle
In My reasearch Schließlich wird der Block immer ausgeführt und hauptsächlich "zum Schließen offener Verbindungen" und zum Zerstören von unnötig laufenden Objekten verwendet.
quelle
Wenn wir Ressourcen wie Streams, Verbindungen usw. verwenden, müssen wir diese im Allgemeinen explizit mit finally block schließen. In dem unten angegebenen Programm lesen wir Daten aus einer Datei mit FileReader und schließen sie mit finally block.
Vielleicht haben andere Leute wie ich nach so etwas gesucht.
Informationen von dieser Seite tutpoint
quelle
Schließlich wird der Block immer ausgeführt. Der Catch-Block wird nur ausgeführt, wenn eine Ausnahme abgefangen wird, die dem Block-Parameter entspricht.
quelle
Bereits im ersten Formular können Sie es in der aufrufenden Methode protokollieren. Es gibt also keinen großen Vorteil, es sei denn, Sie möchten genau dort ein spezielles Handling durchführen.
quelle
Der Try-Block enthält die Anweisungen, die eine Ausnahme auslösen. Der catch-Block enthält die vom try-Block ausgelöste Referenz, und die erforderlichen Nachrichten werden vom catch-Block generiert. Schließlich wird der Block auch verwendet, um die verwendeten Ressourcen zu schließen, wie z. B. Schließen von Dateien, Schließen von Dateien, Schließen von dB. In Java-9 wurde eine erweiterte Try-With-Ressource verwendet, bei der die Ressourcen außerhalb des Try deklariert wurden ist obligatorisch
quelle