Unterschied zwischen finally und write after catch

8

Was ist der Unterschied zwischen "endlich" und schreiben nach "fangen"?

Zum Beispiel:

%Vor%     
Milton90 23.06.2013, 14:39
quelle

10 Antworten

4

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:

%Vor%

Wie schreiben Sie das um? Ohne Code-Duplizierung unmöglich.

    
Marko Topolnik 23.06.2013 15:28
quelle
3

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.

    
Juned Ahsan 23.06.2013 14:42
quelle
2

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 .

    
quelle
1

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.

    
Rahul Modak 12.12.2016 04:16
quelle
0

Als erstes sollten Sie in dieser Frage wissen, warum wir versuchen {} catch {} block "Ok.

verwenden

Die 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>     
Aamir 11.12.2016 17:25
quelle
0

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.

    
programmercito 12.12.2016 01:53
quelle
0

Schließlich ist Block nützlich, um Ihren Code zu säubern, wie das Schließen offener Streams.

Beispiel:

%Vor%     
Ashish Patel 12.12.2016 19:30
quelle
0

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:

dildeepak 13.12.2016 06:55
quelle
0

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.

    
Nilesh Jadav 13.12.2016 12:02
quelle
-2

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.

    
Eduardo Savrin 23.06.2013 14:45
quelle