08.02.2006 - userpages

Werbung
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
Herunterladen