EXCEPTIONS IN JAVA

Die Behandlung von Ausnahmefehlern in Java 5.0
» von Michael Whittaker | www.michael-whittaker.de
1

THEMENÜBERBLICK
I.
• • •

Fehler in Programmen
Handling von Fehlern Wieso Exceptions? / Vorteile Was sind Exceptions?
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

II.
• •

Werfen und Abfangen von Exceptions

• •

Werfen (throw) gezieltes Abfangen „Fang alles!“ TCFTC Dokumentation von Exceptions (@throws)

III.

Exceptionklassen und -typen

eigene Exceptions für eigene Methoden Laufzeit-Exceptions (RuntimeException), Fehler (Error)

IV.

V.

Verständnisfragen und Übungen Weblinks und Literatur

2

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

I. FEHLER IN PROGRAMMEN
• •

Wieso Exceptions? / Vorteile Was sind Exceptions?

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; } else { return faktor1*faktor2; } } // -1 ist Fehlerrückgabe

4

I. FEHLER IN PROGRAMMEN » WAS SIND EXCEPTIONS? WIESO EXCEPTIONS?
„Eine Ausnahme oder Exception ist ein Ereignis, das zur Laufzeit eines Programms eintritt und den normalen Kontrollfluss unterbricht.“
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

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

6

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

II. WERFEN UND ABFANGEN VON

EXCEPTIONS
• • • •

Werfen (throw) gezieltes Abfangen „Fang alles!“ TCFTC

Dokumentation von Exceptions (@throws)

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:
positivMultiply wirft IllegalArgumentException
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

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!
 

im Vorherigen Beispiel wurde explizit die IllegalArgumentException gefangen. Jede Exception ist Unterklasse von Exception, daher möglich:

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

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!"); }

11

Auf Reihenfolge achten! „Catch-All“ erst am Ende, sonst Compiler-Fehler!

II. WERFEN UND ABFANGEN VON EXCEPTIONS
» TRY/CATCH/FINALLY/TRY/CATCH

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):
datei = dateiOeffnen(); datei.zeilenZeigen(); datei.dateiAendern();

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

try { } 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) { 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 <code>IllegalArgumentException</code> * @return positives Produkt der beiden Ganzzahlen */ public Integer positivMultiply(Integer faktor1, Integer faktor2) throws IllegalArgumentException {…}

13

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

III. EXCEPTIONKLASSEN UND -TYPEN
• •

eigene Exceptions für eigene Methoden Laufzeit-Exceptions (RuntimeException), Fehler (Error)

III. EXCEPTIONKLASSEN UND –TYPEN

» EIGENE EXCEPTIONS
 

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

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

public class EinFaktorIstNegativException extends IllegalArgumentException { public EinFaktorIstNegativException() { super(); } public EinFaktorIstNegativException(String msg) { super(msg); } }

optional!

15

III. EXCEPTIONKLASSEN UND –TYPEN » EXCEPTIONTYPEN (EIGTL.: THROWABLE-SUBTYPEN)

16

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

IV. VERSTÄNDNISFRAGEN / ÜBUNGEN

IV. VERSTÄNDNISFRAGEN UND ÜBUNGEN
Gültig?
try {
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

tuWas();
} finally { tuSchließlichDas(); }

Welche Exceptions können hiermit abgefangen werden? Ist die Möglichkeit sinnvoll?
catch (Exception e) {
...

}

18

IV. VERSTÄNDNISFRAGEN UND ÜBUNGEN (FORTS.)
Ist folgender Code richtig? Kann man es kompilieren?
try { ... } catch (Exception e) { ... } catch (ArithmeticException a) { ... }
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

Eigenarbeit: Füge der Potenzmethode (eigene) Exceptions hinzu! ( Übrungen s. Server im Ordner Java_Exceptions)

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
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de

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

21

DANKE FÜR DIE AUFMERKSAMKEIT!
» Michael Whittaker | www.michael-whittaker.de

Sign up to vote on this title
UsefulNot useful