Zunächst einmal ist das einzige Idiom, das sogar als Kandidat betrachtet werden kann:
%Vor% Beachten Sie den gefangenen Typ. Nur wenn du eine mögliche Ausnahme findest, einschließlich solcher dunkler Monster wie ThreadDeath
und VirtualMachineError
kannst du hoffen, den Code unter dem Versuch-Fang unbedingt zu erreichen.
Aber das ist nur, wo es anfängt. Was passiert, wenn der Code selbst eine Ausnahme auslöst? Du brauchst also mindestens
%Vor% Jetzt fangen Sie vielleicht an, die Vorteile von finally
zu erkennen, aber das ist noch nicht alles. Betrachten Sie ein ziemlich typisches Szenario:
Wie schreiben Sie das um? Ohne Code-Duplizierung unmöglich.
In dem von Ihnen angegebenen Code gibt es keinen Unterschied. Aber schließlich wird verwendet, um einen Teil des Codes nach dem try Block auszuführen, egal ob eine Ausnahme vorliegt oder nicht.
Interessanter Punkt, den es hier zu machen gilt, sollten wir vermeiden, vom finally-Block zurückzukommen, weil es Verwirrung im Szenario erzeugen kann, wenn wir auch etwas vom try-Block zurückgeben. Betrachten Sie diesen Code:
%Vor%Nun wird dieser Code false zurückgeben, egal was in try passiert. In vielerlei Hinsicht stimmt dieses Verhalten genau mit dem umgangssprachlichen Verständnis dessen überein, was letztendlich bedeutet: "Egal was vorher im try-Block passiert, führe diesen Code immer aus." Wenn Sie also true von einem finally-Block zurückgeben, muss der Gesamteffekt immer den Wert true haben, nein?
Im Allgemeinen ist das selten ein gutes Idiom, und Sie sollten schließlich verwenden blockiert großzügig Ressourcen zu säubern / schließend, aber selten wenn überhaupt gib einen Wert von ihnen zurück.
Kein Unterschied in Ihrem Fall. aber
Das Laufzeitsystem führt immer die Anweisungen innerhalb der Blockierung aus, unabhängig davon, was passiert innerhalb des Versuchsblocks.
Es ist also der perfekte Ort für die Säuberung.
Beachten Sie, dass bei Verwendung von JDK 7+ die meisten Verwendungen des finally-Blocks eliminiert werden können, indem einfach ein try-with-resources-aussage .
Wir verwenden try block, catch block und blocked schließlich, um Exception in unserem Programm zu behandeln. Ein Programm kann aktiviert oder deaktiviert sein. Dieser Block wird also verwendet, um diese Ausnahme zu behandeln. Im try-Block erwähnen oder schreiben wir den Code, der eine Exception verursachen könnte, und wenn wir möchten, dass unser Code ausgeführt wird, wenn eine Exception aufgetreten ist, schreiben wir diesen Code in den catch-Block. Schließlich ist ein ganz spezieller Block, der uns eine spezielle Funktion gibt, dass, wenn unser catch-Block nicht läuft, bevor das Programm beendet wird, schließlich der Blockcode definitiv ausgeführt wird. meistens wird dies verwendet, um unsere Daten während unerwünschter Programmbeendigung zu speichern. Wenn wir try block verwenden, muss nach dem try-Block ein catch-Block stehen, aber schließlich ist ein optionaler nicht obligatorisch.
Als erstes sollten Sie in dieser Frage wissen, warum wir versuchen {} catch {} block "Ok.
verwendenDie Antwort ist, wenn es eine Möglichkeit gibt, dass unser Code eine Ausnahme auslöst.
Diese Art von Code, den wir in try {...} block & amp; catch {...} Block enthält den Code zum Abfangen der Ausnahme, die durch den Code in try {} Block generiert wurde.
Schließlich enthält {...} block den Code, der unmittelbar nach try {} catch {} block ausgeführt wird, wenn try {} block eine Ausnahme auslöst.
Wenn Sie zB eine Webseite besuchen, aber zu irgendeinem serverseitigen Problem nicht kommen und eine Nachricht wie "404 error or server is updating" anzeigen, wird diese Art von Code in finally block geschrieben.
p>Dieser einfache Catch ist nur für catch eXception und verarbeitet ihn, aber schließlich führt er aus, ob Exception oder nicht, zum Beispiel für enge Verbindungen.
Schließlich ist Block nützlich, um Ihren Code zu säubern, wie das Schließen offener Streams.
Beispiel:
%Vor% Da Ihr Code nur true/false
zurückgibt, hat dies keine großen Auswirkungen. Aber denken Sie an irgendeinen anderen Code / eine andere Logik, wo ein bestimmter Pflicht- / Bereinigungscode zum Ausführen geschrieben wird.
Außerdem wird es schwierig, alle Ausnahmen über unseren Code zu erfassen, oder mit anderen Worten, wir sollten bestimmte Ausnahmen abfangen, mit denen wir umgehen können. An diesem Punkt wird finally
ein echter Retter sein, da er immer ausgeführt wird (außer System.exit()
oder in einem Rekursionsfall).
Um Konsistenz in unserem Code zu erreichen, sollte immer finally
block verwendet werden, um Bereinigungscode auszuführen.
Sie können die folgenden Posts auch für weitere Erläuterungen verwenden:
Erster Fall:
Wenn im try-Block eine Ausnahme aufgetreten ist, wird der catch-Block ausgeführt, und während derselbe catch-Block ausgeführt wird, wenn erneut eine Ausnahme aufgetreten ist, wird schließlich block ausgeführt.
Zweiter Fall:
Wenn im try-Block eine Exception aufgetreten ist, wird der catch-Block ausgeführt, und wenn es im selben catch-Block weitere Ausnahmen gibt, dann "return true;" würde ausgeführt werden.
finally () wird immer dann verwendet, wenn eine Codezeile ausgeführt werden soll, selbst wenn eine Ausnahme auftritt Aber wenn Sie Codezeile nach Catch schreiben, wird es nicht ausgeführt, wenn eine Ausnahme auftritt.
Tags und Links java exception try-catch try-catch-finally