Einführung in objektorientierte Programmierung mit JAVA Exceptions Gliederung Gliederung • Grundlagen Grundlagen • Schlüsselworte try-catch try-catch • Fehlerobjekte Fehlerobjekt Fehlerklassen • Fehlerklassen finally • Schlüsselwort finally throws • Schlüsselwort throws eigene Fehlerklassen © Philip Brandt 2008 • selbst erstellte Exceptions Einführung in objektorientierte Programmierung mit JAVA Exceptions Gliederung Exceptions ermöglichen die Behandlung von Fehlern, die zur Laufzeit entstehen. Grundlagen try-catch in C: Fehler führt immer zum Abbruch des Programms Fehlerobjekt Fehlerklassen finally throws eigeneFehlerklassen • Throwing: bezeichnet das Auslösen einer Exception • Catching: bezeichnet die Behandlung einer Exception © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Eine Exception kann im gleichen Programmteil behandelt werden, in dem sie erzeugt wird, oder weitergegeben werden. Gliederung Grundlagen try-catch Wird die Exception nicht explizit behandelt, erzeugt der Compiler eine Fehlermeldung und bricht das Programm ab. Fehlerobjekt Fehlerklassen Exception in thread "main" java.lang.Error: Unresolved compilation problem: finally Wuerfel cannot be resolved or is not a field throws eigeneFehlerklassen © Philip Brandt 2008 at Aufgabe2.main(Aufgabe2.java:29) Einführung in objektorientierte Programmierung mit JAVA Exceptions Nach einer catch-Klausel kann das Programm fortgeführt werden. Gliederung Grundlagen try-catch public class Bsp_Feld { public static void main(String[] args) { int feld[] = new int[4]; Fehlerobjekt for (int i = 0; i<=6; i++){ Fehlerklassen try{ feld[i] = i; finally System.out.printf("%d\n", feld[i]); throws } catch (ArrayIndexOutOfBoundsException e1){ eigeneFehlerklassen System.out.printf("Das Feld ist zu kurz!!!\n"); } } System.out.printf("Programm zuende!"); } } > Beispiel 1, 2 © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Die Anweisungen werden von einem try...catch-Block eingeschlossen. Gliederung try { Grundlagen try-catch //Programmcode ... Fehlerobjekt } catch (Ausnahmetyp x) { Fehlerklassen //Anweisungen bei Exception finally ... throws eigene Fehlerklassen } Beispiel für einen Ausnahmetyp: NegativeArraySizeException Der Versuch, ein Feld einer negativen Länge zu erstellen. (Exception zu finden in java.lang Bobliothek) http://java.sun.com/j2se/1.4.2/docs/api/java/lang/class-use/Exception.html © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Gliederung Die Exception übergibt das Fehlerobjekt e. } catch (ArrayIndexOutOfBoundsException e){ Grundlagen try...catch Fehlerobjekt Fehlerobjekt • ist Instantz der Klasse Throwable. Fehlerklassen • enthält Informationen über die Art des aufgetretenen Fehlers. finally throws eigene Mit der Methode toString() kann man den Fehlertext anzeigen lassen. Fehlerklassen System.out.println(e.toString()); Wenn kein eigener Exception-Handler geschrieben wurde, wird die Methode printStackTrace() vom Compiler ausgegeben. > Beispiel 3 © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Es können mehrere mögliche Fehler mit mehreren catchKlauseln abgefangen werden. Gliederung Grundlagen Beispiel: • ArrayIndexOutOfBounceException e1 try...catch Fehlerobjekt Fehlerklassen finally throws eigene Fehlerklassen (Array zu klein) •ArrayStoreException e2 (Falscher Datentyp für Array) • NegativeArraySizeException e3 (Negativer Index) System.out.println(e1.toString()); System.out.println(e2.toString()); System.out.println(e3.toString()); © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Alle Laufzeitfehler in JAVA sind Unterklassen der Klasse Throwable. Gliederung Grundlagen try...catch Fehlerobjekt Fehlerklassen Die Klasse Throwable ist eine allgemeine Fehlerklasse, die den Fehlerklartext speichern und einen Auszug aus dem LaufzeitStack geben. finally throws eigene Fehlerklassen © Philip Brandt 2008 Unterhalb von Throwable gibt es zwei Vererbungshierachien. Einführung in objektorientierte Programmierung mit JAVA Exceptions Unterhalb von Throwable gibt es zwei Klassen: Gliederung Grundlagen Exception try...catch Fehlerobjekt Fehlerklassen Error • werden hauptsächlich durch die Java-Maschine versursacht finally throws • sollten nicht behandelt werden eigene • sollten zum Abbruch des Programm führen Fehlerklassen © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Gliederung Die finally-Klausel wird immer aufgerufen, wenn ein try-Block verlassen wurde. Grundlagen Eine Exception muss nicht auftreten! try...catch Der Grund des Verlassens ist egal. Fehlerobjekt Fehlerklassen finally throws eigene Fehlerklassen Beispiele: • das Ende des try-Blocks wurde erreicht • eine Exception wurde behandelt • eine Exception wurde nicht behandelt • der try-Block mit break, continue oder return beendet wurde > Beispiel 4 © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Gliederung Manche Exceptions sind geprüfte Exceptions. Mit diesen Exceptions muss etwas geschehen, also entweder weiterreichen oder mittels catch behandeln. Grundlagen try...catch Fehlerobjekt Fehlerklassen finally throws eigene Fehlerklassen public class MachtIO { public static void main ( String[] args ) throws IOException { BufferedReader stdin = new BufferedReader ( new InputStreamReader( System.in ) ); // weitere Java Anweisungen ... } } Mit throws IOException wird deutlich, dass Exception nicht in main() aufgefangen wird, sondern an das Java Laufzeitsystem übergeben wird. > Beispiel 5 © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Übersicht über geprüfte und ungeprüfte Exceptions Gliederung Exception GEPRÜFT Grundlagen IOException GEPRÜFT try...catch AWTException GEPRÜFT Fehlerobjekt RunTimeException Fehlerklassen finally ArithmeticException IllegalArgumentException throws NumberFormatException eigene Fehlerklassen IndexOutOfBounds Others Others GEPRÜFT © Philip Brandt 2008 Exception Einführung in objektorientierte Programmierung mit JAVA Exceptions Gliederung Mit dem Schlüsselwort throw kann man sich eigene Exceptions schreiben. Grundlagen try...catch Fehlerobjekt Im Beispiel soll der Versicherungsbetrag für eine Person ermittelt werden. Fehlerklassen finally throws eigene Fehlerklassen > Beispiel 6 © Philip Brandt 2008 Einführung in objektorientierte Programmierung mit JAVA Exceptions Gliederung Grundlagen try...catch Fehlerobjekt Fehlerklassen finally throws eigene Fehlerklassen © Philip Brandt 2008 Vielen Dank für die Aufmerksamkeit!