spezielle Exception catchen bei throws Exception
lima-city → Forum → Programmiersprachen → Java
aktiv code
code
dritten beispiel
eigenheit
fangen
frage
funktionieren
genau sagen
glauben
http
interface
konstrukt
methode
problem
schnelle antwort
teil
testen
url
verwenden
werfen
-
Ich frage mich, ob man eine spezielle Exception fangen kann, wenn man throws Exception in der Methode geschrieben hat.
So in etwa:
try { methode() } catch( AndereException e ) {} // wird das aktiv? catch( Exception e ) {} public void methode throws Exception {}
Mein Problem ist, dass Implementationen eines Interfaces durchaus Exceptions werfen könnten, aber ich das nicht genau sagen kann. die dürften sie ohne das throws nicht werfen, weil das dann kein Override ist und wenn kein Override muss man einen andern Methodenamen verwenden. Eigentlich sind ja RuntimeExceptions dafür da, aber bei mir betrifft das unter anderem InterruptingException, die eine Checked Exception ist. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
lt. dem dritten Beispiel hier sollte das funktionieren:
http://schabby.de/try-catch-java/
dort werden auch zwei verschiedene Exceptions unterschieden und abgefangen.
Hier wird das auch gut verstanden:
http://www.mpi-inf.mpg.de/departments/d5/teaching/ss05/is05/java/GoToJava2.2/html/k100076.html#sectlevel3id012002005
hth
-
Danke schonmal für die schnelle Antwort, aber da bezieht sich die MalformedURLException auf den Konstruktor und die IOException auf die openStream Methode. Deshalb wird das auch so in der Methode per throws deklariert.
Ich werds wohl irgendwie testen müssen. Da ist Java nur so ungelenk, weil man soviel erstmal amchen muss. -
Also theoretisch müsste das schon gehen.
Java schaut sich das erste catch mit der AndereException an und sieht: "aaah passt"
dann schaut es sich das nächste an und sieht: "aaaah das passt auch"
Aber falls du auf was anderes gestoßen bist, bitte mal posten
Viel Spaß -
Ja ich habs auch nochmal getestet und es funktioniert tatsächlich.
Allerdings habe ich das alles jetzt vereinheitlicht, indem ich selbst eine spezielle Exception definiert habe und jede andere Exception muss dann als cause dem Konstruktor übergeben werden. Ich glaube das ich designtechnisch sinnvoller, da ansonsten derjenige, der die Methode verwendet alle Exceptions catchen muss und demzufolge auch unabsichtlich die ganzen RuntimeExceptions abbekommt, die er dann nach nem instanceof wieder werfen müsste.
Also eher unschön. -
reimann schrieb:
try { methode() } catch( AndereException e ) {} // wird das aktiv? catch( Exception e ) {} public void methode throws Exception {}
Solche Konstrukte funktionieren, haben aber eine Eigenheit:
wenn du
try { methode() } catch( Exception e ) {} catch( AndereException e ) {} // wird das aktiv?
schreibst wird AndereException niemal aufgerufen, da
. Der 1. catch der zutrifft wird ausgeführt, alle anderen nicht. Da AndereException von Exception erbt wird natürlich catch(Exception e) zutreffen und die AndereException im Teil für Exception behandelt!AndereException extends Exception
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage