Fehlerbehandlung Java –exceptions- Fragen Murphy’s Law If anything can go wrong, it will. Falls irgendetwas schiefgehen kann, dann geht es schief. »Wir sind in Sicherheit! Er kann uns nicht erreichen!« »Sicher?« »Ganz sicher! Bären haben Angst vor Treibsand!« Hägar, Dik Browne Fehlerbehandlung in Java z z z z Der Java Mechanismus zur Behandlung von Ausnahmen besteht aus der try/catch/finally – Anweisung try hier steht der Code der ausgeführt werden soll. catch wenn innerhalb des try Blockes ein Fehler auftaucht wird er hier behandelt finally hier können zusätzliche Aufräumaktionen durchgeführt werden Beispiel try { //Normalerweise wird dieser Code //problemlos von oben nach unten ausgeführt. } catch(EineException e){//Dieser Block enthält //Anweisungen, die Ausnahmeobjekte des //Typs EineException behandeln } finally{ //Anweisungen werden immer nach dem //Verlassen der try Klausel ausgeführt } Beispiel Integer[] zahlen = new Integer[3]; try { zahlen[1] = 3; // wird ausgeführt zahlen[4] = 1; // führt zu einem Fehler zahlen[2] = 5; // wird nicht ausgeführt! System.out.println("Try-Block wurde ausgeführt"); } catch (Exception x) { System.out.println("Ein Fehler ist aufgetreten: " + x); } 2 Arten von Fehlern z z Schwere Fehler: Führen immer direkt zum beenden des Systems Weniger schwerwiegenden Ausnahmen sind alle von Exception abgeleitet und können mit Hilfe von try und catch behandelt werden Mehrer Catch Klauseln Vector zahlen = new Vector(); zahlen.add(1); zahlen.add(2); zahlen.add(0); zahlen.add("Fünfzehn"); Integer i; for(i = 0; i <= zahlen.size(); i++) { try { Integer zahl = (Integer) zahlen.get(i); Integer ergebnis = 10 / zahl; System.out.println("Berechnung von 10 / " + zahl + ": " + ergebnis); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Die Position " + i + " ist in diesem Array nicht vorhanden!"); } catch (ArithmeticException e) { System.out.println("Mathematischer Fehler!"); } catch (ClassCastException c) { System.out.println("Das Objekt an Position " + i + " ist keine Zahl!"); } catch (Exception x) { System.out.println("Unbekannter Fehler!"); } } Werfen von Exceptions z z Durch throws wird in einer Methodendeklaration gekennzeichnet, welche Exceptions durch diese Methode verursacht werden können (dabei können auch mehrere Exceptions durch Kommata getrennt angegeben werden); während mit Hilfe des Schlüsselworts throw innerhalb eines Methodenkörpers an der gewünschten Stelle das "Werfen" einer Exception ausgelöst werden kann, wie folgendes Beispiel demonstriert: public void irgendeineMethode(Integer x) throws MyException1, MyException2 { ... if(x < 0) throw new MyException1(); ... if(x > 9) throw new MyException2(); ... } Werfen von Exceptions z z z z Durch das Schlüsselwort throws ergibt sich eine weitere Möglichkeit, mit fehleranfälligem Code umzugehen: Statt Fehler in einer Methode mit Hilfe von try/catch-Blöcken abzufangen und auf diese zu reagieren, können die Fehler auch "weitergeworfen" werden, indem sie mit Hilfe des throws-Statements in der Methodendeklaration angegeben werden. Die Methode irgendeineMethode() kann also auf zwei Arten aufgerufen werden: void weiterleitenderAufruf() throws MyException1, MyException2{ irgendeineMethode(5); } void abfangenderAufruf() { try { irgendeineMethode(5); } catch (MyException1) { ... } catch (MyException2) { ... } } Weiter Infos z http://www.galileocomputing.de/openbook/jav ainsel4/javainsel_07_000.htm Übungsaufgaben z z Siehe www.uni-koblenz.de/~sebath Aufgaben Lösungen zu den Aufgabe nach der Veranstaltung auch auf der Seite