finally

jf

Bekanntes Mitglied
Mit finally kann man ja noch Befehle ausführen lassen - egal, ob man im catch-Zweig gelandet ist oder nicht.

Wird der Quelltext unter finallly auch ausgeführt, wenn zuvor ein return wie folgt erfolgt:
Java:
			try {
				[...]
				return true;
			} catch(IOException e) {
				[...]
				return false;
			} finally {
				closeSocket();
			}
 

FArt

Top Contributor
... aber vorsicht!

Wird im finally-Block eine Exception geworfen und nicht behandelt, dann ist es Schluß mit dem return (ist nicht immer erwünscht). Auch doof: wenn vorher eine Exception geworfen wurde die nicht behandelt wurde. Eine Exception aus dem finally-Block würde diese dann nämlich überdecken, was in der Regel nicht erwünscht ist.
 

jf

Bekanntes Mitglied
... aber vorsicht!

Wird im finally-Block eine Exception geworfen und nicht behandelt, dann ist es Schluß mit dem return (ist nicht immer erwünscht). Auch doof: wenn vorher eine Exception geworfen wurde die nicht behandelt wurde. Eine Exception aus dem finally-Block würde diese dann nämlich überdecken, was in der Regel nicht erwünscht ist.
ok, dann führe ich lieber eine boolean variable ein... :D
 

Der Müde Joe

Top Contributor
>ok, dann führe ich lieber eine boolean variable ein..

oder mach ein safeClose
Java:
public static void safeClose(Closeable c) { 
try{ 
c.close();
} catch(IOException e) { 
/* ignore*/}
}
}
 

jf

Bekanntes Mitglied
oder mach ein safeClose
Der Socket wird bereits sicher geschlossen, nur finde ich es etwas übersichtlicher, wenn ich vor dem try {} einen boolsche Variable deklariere, diese anstelle der returns auf true bzw. false setze und am Ende der Routine zurück gebe (und dort auch noch den Socket schließe). - Damit läuft man dann nicht Gefahr (z. B. durch spätere Änderungen am Quelltext) Situationen zu erzeugen, vor welchen FArt gewarnt hat. :)
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben