Wieso manche Objekte nicht instanzieren?

chell

Mitglied
Hallo,

ich bin gerade bei Java auf ein Problem gestoßen. Man legte mir einen Quellcode vor:

try {

//Hier steht irgendwas
}
catch(Exception e) {
//Hier steht auch irgendwas

}

soweit ich weiß, ist Exception eine Klasse. In diesem Fall wurde die Exception e benannt. Wieso muss diese nun nicht mir Exception e = new Exception(); instanziert werden?

Mfg

chell
 
Hallo!

Irgendwo im Quellcode der Methode(n) die du im try{... Block aufrufst steht ein Aufruf der Art new XYException(); ...
jedoch werden diese Erst durch die throw Anweisung von der Laufzeit als Ausnahmen gekennzeichnet und für die catch Blöcke verfügbar.

Gruß Tom
 
Zuerst einmal danke für Deine Antwort. Könntest du das aber noch etwas mehr für Anfänger verständlich machen?

Ich habe das jetzt so verstanden:

Wenn im try Block eine Exception auftrittt, so wird automatisch eine new Exception generiert und dieser wird dann in den runden Klammern bei catch ein Name gegeben.


Ist das so richtig?

Mfg

chell
 
chell hat gesagt.:
Hallo,
ich bin gerade bei Java auf ein Problem gestoßen. Man legte mir einen Quellcode vor:

try {
//Hier steht irgendwas
}
catch(Exception e) {
//Hier steht auch irgendwas
}

soweit ich weiß, ist Exception eine Klasse. In diesem Fall wurde die Exception e benannt. Wieso muss diese nun nicht mir Exception e = new Exception(); instanziert werden?

Mfg

chell

Ganz einfach: In
catch(Exception e)
bekommt man ein Objekt e der Klasse Exception bereits übergeben. Genauso wie z.B. in der paint()-Methode, in der u.a. ein Graphics-Objekt übergeben wird.
Die Exception wird i.A. durch die Java Runtime ausgelöst, also intern - man kann aber auch eigene Exceptions "werfen". I.d.R. ist das selten notwendig.
 
Hallo!

Wenn im try Block eine Exception auftrittt, so wird automatisch eine new Exception generiert und dieser wird dann in den runden Klammern bei catch ein Name gegeben.

Wenn im try-Block eine Exception auftritt dann wurde schon unmittelbar vorher ein
throw new XYException(); ausgeführt. Der catch Block reagiert nun auf den Exception Typ für den er Deklariert wurde:
catch(IOException e) -> fängt alle Ausnahmen vom Typ IOException (auch Subtypen)
catch(Exception e) -> Fängte alle Arten von Exceptions (Z.bsp. auch IOException), jedoch keine von RuntimeException abgeleiteten Exception...
Von RuntimeException abgeleitete Exceptions müssen nicht mit aufgefangen werden.
catch(Throwable t) -> Fängt alle Exceptions/RuntimeExceptions und sogar Errors!

HTH,
Gruß Tom
 
Zurück