29.01.2013 Vorlesung „Programmieren“ Exceptions Dr. Dennis Pfisterer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/pfisterer Exceptions • Wichtige Eigenschaft von Programmen: Fehlerbehandlung – – – – Eingabefehler des Benutzers Fehler beim Lesen oder Schreiben von Dateien (Datei existiert nicht, keine Rechte, ...) Netzwerkressourcen (z.B. WLAN-Verbindung unterbrochen) ... • Fehlerbehandlung in Java durch Konzept der Exceptions – Exceptions sind Klassen, die Fehlerinformationen transportieren – Werden im Code „geworfen“ (ausgelöst) und müssen an anderer Stelle „gefangen“ (behandelt) werden – Programm wird nach Behandlung einer Exception normal fortgesetzt – http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html 5-3-2 Exceptions werfen • Werfen einer Instanz der Klasse Throwable – Gilt natürlich auch für alle Subklassen – Wichtige Unterklasse von Throwable: Exception • Schlüsselwort: throw – Wird zum Werfen einer Instanz verwendet • Beispiele – Exception e = new Exception(”Fehler”); throw e; – throw new Exception("Fehler"); 5-3-3 1 29.01.2013 Exceptions werfen: Deklaration • Methoden, die Exceptions werfen, müssen dies in der Signatur deklarieren – Deklaration: Schlüsselwort throws – Beispiel: void f() throws Exception {...} – Ausnahme: bestimmte Exceptions (siehe später) • Exceptions müssen auch deklariert werden, wenn Methoden aufgerufen werden, die Exceptions werfen – Ausnahme: Exception wird „gefangen“ (siehe später) Beispiel: throws und throw 5-3-5 Klassenhierarchie von Exceptions • Oberklasse: Throwable Throwable – Exception: Kann sinnvoll behandelt werden, Programm kann danach weiterlaufen – RuntimeException: Sollte normal nicht auftreten, sollte aber behandelt werden können – Error: Programm kann Ausnahme nicht behandeln normal Programmabbruch • Error Runtime Exception Exception IOException ClassNotFoundException Unterscheidung – Exceptions müssen vom Programm abgefangen werden – Errors & RuntimeExceptions können immer auftreten, müssen aber nicht explizit behandelt werden (kein throws notwendig) NullPointerException ClassCastException IndexOutOfBoundsException 2 29.01.2013 Klasse Exception • Dokumentation – http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html • Viele Subklassen Fangen von Exceptions • Exceptions können/müssen gefangen werden – Schlüsselwörter: try und catch Exceptions weiterreichen • Alternative zum Fangen: „weiterwerfen“ – Standardverhalten: Exceptions weiterreichen, bis sie behandelt werden – Müssen dann von der aktuellen Methode deklariert werden • Guter Stil – Exceptions so früh wie möglich und sinnvoll behandeln – Nur weiterwerfen wenn lokale Fehlerbehandlung nicht sinnvoll ist 5-3-9 3 29.01.2013 Exceptions „weiterwerfen“ Beispiel: Obstkorb 4