EXCEPTIONS IN JAVA Die Behandlung von Ausnahmefehlern in Java 5.0 » von Michael Whittaker | www.michael-whittaker.de
1
THEMENÜBERBLICK Fehler in Programmen
I. • •
Werfen und Abfangen von Exceptions
II. • •
• • • •
•
V.
Werfen (throw) gezieltes Abfangen „Fang alles!“ TCFTC Dokumentation von Exceptions (@throws)
Exceptionklassen und -typen
III.
IV.
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
•
Handling von Fehlern Wieso Exceptions? / Vorteile Was sind Exceptions?
eigene Exceptions für eigene Methoden Laufzeit-Exceptions (RuntimeException), Fehler (Error)
Verständnisfragen und Übungen Weblinks und Literatur
2
• •
Wieso Exceptions? / Vorteile Was sind Exceptions?
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
I. FEHLER IN PROGRAMMEN
I. FEHLER IN PROGRAMMEN » HANDLING alte Methode:
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
public Integer positivMultiply(Integer faktor1, Integer faktor2) {
if((faktor1>0 & faktor2<0) || (faktor1<0 & faktor2>0)) { System.out.println("Fehler: 1 Faktor ist negativ!"); return -1;
// -1 ist Fehlerrückgabe
} else { return faktor1*faktor2; } }
4
I. FEHLER IN PROGRAMMEN » WAS SIND EXCEPTIONS? WIESO EXCEPTIONS?
zum Kontrollieren von Fehlern wie z. B. den ungültigen Faktoren im Beispiel Fehler sind Probleme, die auftreten, nicht behoben werden können und um die sich „jemand“ kümmern muss mit Exceptions werden Code und Fehler(behandlung) sauber getrennt; Rückgabewerte nur für Ergebnisse
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
„Eine Ausnahme oder Exception ist ein Ereignis, das zur Laufzeit eines Programms eintritt und den normalen Kontrollfluss unterbricht.“
5
I. FEHLER IN PROGRAMMEN » WAS SIND EXCEPTIONS? sind Objekte (Typ: Exception und Unterklassen) werden mit new erzeugt. werden mit throw geworfen Klasse (=Typ) ist wichtigste Information Java hat schon viele Exceptionklassen eigene können aber erstellt werden Exceptions werden nicht in fehlergenerierender Methode, sondern z. B. im Aufrufer behandelt
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
6
EXCEPTIONS • • • •
Werfen (throw) gezieltes Abfangen „Fang alles!“ TCFTC
•
Dokumentation von Exceptions (@throws)
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
II. WERFEN UND ABFANGEN VON
II. WERFEN UND ABFANGEN VON EXCEPTIONS » WERFEN public Integer positivMultiply(Integer faktor1, Integer faktor2) throws IllegalArgumentException { Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
if((faktor1>0 & faktor2<0) || (faktor1<0 & faktor2>0)) { throw new IllegalArgumentException(); } else { return faktor1*faktor2; } } Alternative - Exception mit Stringargument im Konstruktor: 8
throw new IllegalArgumentException("faktor 1: "+faktor1+" // faktor2: "+faktor2);
II. WERFEN UND ABFANGEN VON EXCEPTIONS » GEZIELTES ABFANGEN
durch Dokumentation ist bekannt:
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
positivMultiply wirft IllegalArgumentException
Fehler muss beim Aufruf behandelt werden:
try { System.out.println(test.positivMultiply(2, -3)); } catch (IllegalArgumentException e) {
}
//
System.err.println("Einer der Faktoren war negativ!"); System.err.println(e.getMessage());
Der „Versuch“ den Code auszuführen. Eine IllegalArgumentException wird gefangen (ge-“catch“-t) und der Fehler auf der Konsole ausgegeben! N.B.: System.err ist die Fehlerkonsole (in unserem Fall gleich mit System.out!)
9
II. WERFEN UND ABFANGEN VON EXCEPTIONS » FANG ALLES! Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
Bild: aus dem Galileo OpenBook „Java ist auch eine Insel“ von C. Ullenboom; ISBN 978-3-89842-747-0
10
II. WERFEN UND ABFANGEN VON EXCEPTIONS » FANG ALLES!
try { probiereJenes(); } catch (IllegalArgumentException e) { System.err.println("Ungültige Argumente!"); } catch (AnotherSpecialException e) { System.err.println("Eine andere bestimmte Ausnahme!"); } catch (Exception e) { // fängt "alles" was über bleibt. System.err.println("Eine noch nicht genannte Exception!"); }
Auf Reihenfolge achten! „Catch-All“ erst am Ende, sonst Compiler-Fehler!
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
im Vorherigen Beispiel wurde explizit die IllegalArgumentException gefangen. Jede Exception ist Unterklasse von Exception, daher möglich:
11
II. WERFEN UND ABFANGEN VON EXCEPTIONS » TRY/CATCH/FINALLY/TRY/CATCH
try { datei = dateiOeffnen(); datei.zeilenZeigen(); datei.dateiAendern();
} catch (FileNotFoundException e) { System.err.println("Datei gibt's nicht!“); } catch (IOException e) { System.err.println("Schreib- Leseprobleme!“); } finally {
if (datei != null) { try { datei.schließen(); } catch (IOException e) {
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
Soll trotz einer evtl. Exception trotzdem noch etwas ausgeführt werden (zum Schluss = finally), benutzt man ein finally-Block (hier aber u. U. auch try/catch):
e.printStackTrace();
} } }
12
II. WERFEN UND ABFANGEN VON EXCEPTIONS » DOKUMENTATION VON EXCEPTIONS (@THROWS)
Benutzer/Programmierer muss Exceptions catchen, daher Dokumentation wichtig: Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
/** * Multipliziert zwei Ganzzahlen - muss dabei * ein positives Ergebnis liefern * * @param faktor1 der erste Faktor * @param faktor2 der zweite Faktor * @throws IllegalArgumentException
* @return positives Produkt der beiden Ganzzahlen */ public Integer positivMultiply(Integer faktor1, Integer faktor2) throws IllegalArgumentException {…}
13
• •
eigene Exceptions für eigene Methoden Laufzeit-Exceptions (RuntimeException), Fehler (Error)
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
III. EXCEPTIONKLASSEN UND -TYPEN
III. EXCEPTIONKLASSEN UND –TYPEN
» EIGENE EXCEPTIONS
public class EinFaktorIstNegativException extends IllegalArgumentException { public EinFaktorIstNegativException() { super(); } public EinFaktorIstNegativException(String msg) { super(msg); } }
optional!
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
Es können neben den in Java enthaltenen Exceptions auch eigene Exceptions kreiert werden. Bedingungen: Unterklasse von Exception ( extends Exception) oder anderer Exception sollte public sein
15
III. EXCEPTIONKLASSEN UND –TYPEN » EXCEPTIONTYPEN (EIGTL.: THROWABLE-SUBTYPEN)
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
16
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
IV. VERSTÄNDNISFRAGEN / ÜBUNGEN
IV. VERSTÄNDNISFRAGEN UND ÜBUNGEN Gültig? tuWas(); } finally { tuSchließlichDas(); }
Welche Exceptions können hiermit abgefangen werden? Ist die Möglichkeit sinnvoll? catch (Exception e) {
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
try {
...
}
18
IV. VERSTÄNDNISFRAGEN UND ÜBUNGEN (FORTS.) Ist folgender Code richtig? Kann man es kompilieren?
Eigenarbeit: Füge der Potenzmethode (eigene) Exceptions hinzu! ( Übrungen s. Server im Ordner Java_Exceptions)
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
try { ... } catch (Exception e) { ... } catch (ArithmeticException a) { ... }
19
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
V. WEBLINKS UND LITERATUR
V. WEBLINKS UND LITERATUR Vorlesungsfolien: http://www.infosun.fmi.unipassau.de/st/edu/pdp01/exceptions.pdf
The Java™ Tutorials: Essential Classes > Lesson: Exceptions: http://java.sun.com/docs/books/tutorial/essential/exceptions/
„Java ist auch eine Insel“ von C. Ullenboom; Verlag: Galileo Computing; ISBN: 978-3-89842-838-5; € 49,90
“Robust Java: Exception Handling, Testing, and Debugging” von Stephen Stelting; Verlag: Prentice Hall PTR; ISBN: 0131008528
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de
21
DANKE FÜR DIE AUFMERKSAMKEIT! » Michael Whittaker | www.michael-whittaker.de