1 / 16 Einstieg in die Informatik mit Java Ausnahmen Gerd Bohlender Institut für Angewandte und Numerische Mathematik
Gliederung 2 / 16 1 Übersicht Ausnahmen 2 Klassenhierarchie 3 Try-Catch-Blöcke 4 Definition eigener Ausnahmen 5 Verwendung des Exception-Parameters
Gliederung 3 / 16 1 Übersicht Ausnahmen 2 Klassenhierarchie 3 Try-Catch-Blöcke 4 Definition eigener Ausnahmen 5 Verwendung des Exception-Parameters
4 / 16 Übersicht Ausnahmen Ausnahmen sind Ausnahmesituationen in Programmen und werden in Java durch spezielle Klassen dargestellt. Im folgenden eine Liste der häufigsten Ausnahmefehler: falscher Feldindex (index out of bounds), unzulässige Zeichen beim Lesen einer Zahl, erfolglose Dateisuche, Division durch Null.
Gliederung 5 / 16 1 Übersicht Ausnahmen 2 Klassenhierarchie 3 Try-Catch-Blöcke 4 Definition eigener Ausnahmen 5 Verwendung des Exception-Parameters
Klassenhierarchie 6 / 16 Throwable Error Exception Virt. Machine Error Linkage Error Runtime Exception... (i.allg. fatale Fehler) (behandelbare Fehler)
Gliederung 7 / 16 1 Übersicht Ausnahmen 2 Klassenhierarchie 3 Try-Catch-Blöcke 4 Definition eigener Ausnahmen 5 Verwendung des Exception-Parameters
Try-Catch Ausnahmen werden mittels try-catch-blöcken behandelt. Syntax t r y { BlockAnw ( Verbundanweisung ) catch ( Ausnahmetyp1 Name) { BlockAusn1 ( Verbundanweisung ) catch ( Ausnahmetyp2 Name) { BlockAusn2 ( Verbundanweisung )... f i n a l l y { / / o p t i o n a l B l o c k F i n a l ( Verbundanweisung ) 8 / 16
Try-Catch Es wird zunächst versucht, die Anweisungen in der Verbundanweisung BlockAnw zwischen try und catch auszuführen. Tritt hierbei keine Ausnahme ein, so wird die Verbundanweisung normal bis zum Ende ausgeführt, die Ausnahmebehandlung in BlockAusn1, BlockAusn2,... wird übergangen. Tritt eine Ausnahme ein, so wird BlockAnw abgebrochen und geprüft, ob die Ausnahme mit einem der Ausnahmetypen Ausnahmetyp1... übereinstimmt. In dem Fall wird die zugeordnete Verbundanweisung BlockAusn1... ausgeführt. Stimmt die Ausnahme mit keinem der Parameter überein, wird keine der Verbundanweisungen BlockAusn1... ausgeführt und die Ausnahme gilt als unbehandelt. In allen Fällen (egal ob eine Ausnahme aufgetreten ist oder nicht) wird am Ende BlockFinal ausgeführt. 9 / 16
10 / 16 Beispiel: Einlesen einer Zahl von der Kommandozeile Mögliche Ausnahmen beim Lesen von der Kommandozeile: (a) keine Eingabe von Parametern an der Kommandozeile, (b) keine legale Zahl in der Parameterzeichenkette. class Catch { public s t a t i c void main ( S t r i n g [ ] args ) { t r y { i n t i = I n t e g e r. p a r s e I n t ( args [ 0 ] ) ; System. out. p r i n t l n ( i ) ; catch ( ArrayIndexOutOfBoundsException e ) { System. out. p r i n t l n ( A u f r u f : java Catch <Zahl> ) ; catch ( NumberFormatException e ) { System. out. p r i n t l n ( F e h l e r h a f t e ganze Zahl ) ;
Try-Catch 11 / 16 Weitere Ausnahmen sind z.b.: ArithmeticException (z.b. Division durch Null) NullPointerException (z.b. Zugriff auf Objekt über null) Die catch-klauseln werden in der angegebenen Reihenfolge geprüft. Dabei wird nur die erste passende ausgeführt, d.h. zunächst müssen spezifische und erst danach allgemeine Ausnahmen geprüft werden (zunächst abgeleitete Klassen, dann erst die Basisklasse). Ausnahmeblöcke können auch geschachtelt werden: Ausnahmen, die vom inneren Ausnahmeblock nicht behandelt werden, werden an den äußeren weitergereicht. Weitere Punkte auf der nächsten Seite
Unbehandelte Ausnahmen 12 / 16 Falls in einer Methode oder einem Konstruktor Ausnahmen auftreten können, die dort nicht lokal behandelt werden, müssen diese hinter dem Methodenkopf aufgelistet werden. Beispiel boolean testeklasse ( Class c, S t r i n g t ) throws ClassNotFoundException {... / / bearbeite c, aber c e x i s t i e r t e v t l. n i c h t. Davon ausgenommen sind die ungeprüften Ausnahmen und deren Subtypen: Error, RuntimeException
Gliederung 13 / 16 1 Übersicht Ausnahmen 2 Klassenhierarchie 3 Try-Catch-Blöcke 4 Definition eigener Ausnahmen 5 Verwendung des Exception-Parameters
Definition eigener Ausnahmen class MeinFehler extends Exception { public MeinFehler ( S t r i n g s ) { super ( s ) ; / / F e h l e r t e x t w e i t e r r e i c h e n... public s t a t i c void main ( S t r i n g [ ] args ) throws MeinFehler { i f ( args. length > 0) throw new MeinFehler ( Und tschuess... ) ;... 14 / 16 Definitionen eigener Ausnahmen sind ebenfalls möglich. Diese werden z.b. von der Klasse Throwable abgeleitet und erzeugt durch throw new Ausnahme (Fehlertext ); Beispiel: Definition einer Ausnahmeklasse
Gliederung 15 / 16 1 Übersicht Ausnahmen 2 Klassenhierarchie 3 Try-Catch-Blöcke 4 Definition eigener Ausnahmen 5 Verwendung des Exception-Parameters
Verwendung des Exception-Parameters 16 / 16 Der Parameter bei catch liefert zusätzliche Informationen über die aufgetretene Ausnahme. Beispiel: public class TryCatchTest { public s t a t i c void main ( S t r i n g [ ] args ) { i n t [ ] f = {0,1,2; for ( i n t i = 1; i <3; i ++) t r y { System. out. p r i n t ( f [ i ] + ) ; catch ( ArrayIndexOutOfBoundsException e ) { System. out. p r i n t l n ( Falscher Index : + e. getmessage ( ) ) ; e. printstacktrace ( ) ; / / Fehlercode und Zeilennummer System. out. p r i n t l n ( Normales Programmende ) ; Gibt folgende Zeilen aus: Falscher Index: -1 java.lang.arrayindexoutofboundsexception: -1 at TryCatchTest.main(TryCatchTest.java:8) 0 1 2 Normales Programmende