Sie sind auf Seite 1von 22
E XCEPTIONS IN J AVA Die Behandlung von Ausnahmefehlern in Java 5.0 1 » von

EXCEPTIONS IN JAVA

Die Behandlung von Ausnahmefehlern in Java 5.0

1

E XCEPTIONS IN J AVA Die Behandlung von Ausnahmefehlern in Java 5.0 1 » von Michael

» von Michael Whittaker | www.michael-whittaker.de

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

THEMENÜBERBLICK

I.

Fehler in Programmen

Handling von Fehlern

Wieso Exceptions? / Vorteile

Was sind Exceptions?

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.

Verständnisfragen und Übungen

V.

Weblinks und Literatur

( RuntimeException ), Fehler ( Error ) IV. Verständnisfragen und Übungen V. Weblinks und Literatur 2
2
2

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

in Java | Michael Whittaker | www.michael-whittaker.de I. F EHLER IN P ROGRAMMEN • Wieso Exceptions?
in Java | Michael Whittaker | www.michael-whittaker.de I. F EHLER IN P ROGRAMMEN • Wieso Exceptions?
in Java | Michael Whittaker | www.michael-whittaker.de I. F EHLER IN P ROGRAMMEN • Wieso Exceptions?

I. FEHLER IN PROGRAMMEN

Wieso Exceptions? / Vorteile

Was sind Exceptions?

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

I. FEHLER IN PROGRAMMEN » HANDLING

alte Methode:

I. F EHLER IN P ROGRAMMEN » H ANDLING  alte Methode: public Integer positivMultiply( Integer

public Integer positivMultiply(Integer faktor1, Integer faktor2) {

}

if((faktor1>0 & faktor2<0) || (faktor1<0 & faktor2>0)) {

System.out.println("Fehler: 1 Faktor ist negativ!");

.out.println( "Fehler: 1 Faktor ist negativ!" ); return - 1 ; // -1 ist Fehlerrückgabe }

return -1;

// -1 ist Fehlerrückgabe

} else { return faktor1*faktor2;

}

4
4

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

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.“

eintritt und den normalen Kontrollfluss unterbricht.“  zum Kontrollieren von Fehlern wie z. B. den

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

5
5

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

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

Information  Java hat schon viele Exceptionklassen  eigene können aber erstellt werden  Exceptions

eigene können aber erstellt werden

Exceptions werden nicht in fehlergenerierender Methode, sondern z. B. im Aufrufer behandelt

6
6

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

in Java | Michael Whittaker | www.michael-whittaker.de II. W ERFEN UND A BFANGEN VON E XCEPTIONS
in Java | Michael Whittaker | www.michael-whittaker.de II. W ERFEN UND A BFANGEN VON E XCEPTIONS

II. WERFEN UND ABFANGEN VON 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 EXCEPTIONS

» WERFEN

public Integer positivMultiply(Integer faktor1, Integer

faktor2) throws IllegalArgumentException {

Integer faktor2) throws IllegalArgumentException { if ((faktor1> 0 & faktor2< 0 ) || (faktor1<

if((faktor1>0 & faktor2<0)

|| (faktor1<0 & faktor2>0)) {

}

0 ) || (faktor1< 0 & faktor2> 0 )) { } throw new IllegalArgumentException (); }

throw new IllegalArgumentException();

} else {

return faktor1*faktor2;

}

(); } else { return faktor1*faktor2; } Alternative - Exception mit Stringargument im Konstruktor:
Alternative - Exception mit Stringargument im Konstruktor:
Alternative - Exception mit Stringargument im Konstruktor:

throw new IllegalArgumentException("faktor 1: "+faktor1+" // faktor2: "+faktor2);

8
8

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

II. WERFEN UND ABFANGEN VON EXCEPTIONS

» GEZIELTES ABFANGEN

durch Dokumentation ist bekannt:

positivMultiply wirft IllegalArgumentException

bekannt: positivMultiply wirft IllegalArgumentException  Fehler muss beim Aufruf behandelt werden: try {

Fehler muss beim Aufruf behandelt werden:

 Fehler muss beim Aufruf behandelt werden: try { System.out.println(test.positivMultiply(2, -3)); }
try { System.out.println(test.positivMultiply(2, -3)); } catch (IllegalArgumentException e) {
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!

9
9

N.B.: System.err ist die Fehlerkonsole

(in unserem Fall gleich mit System.out!)

II. WERFEN UND ABFANGEN VON EXCEPTIONS

» FANG ALLES!

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de Bild: aus dem Galileo OpenBook „Java ist
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

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

II. WERFEN UND ABFANGEN VON EXCEPTIONS

» FANG ALLES!

im Vorherigen Beispiel wurde explizit die

IllegalArgumentException gefangen.

wurde explizit die IllegalArgumentException gefangen.  Jede Exception ist Unterklasse von Exception , daher

Jede Exception ist Unterklasse von Exception, daher

möglich:

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
11

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

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

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):

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 {

"Schreib- Leseprobleme!“ ); } finally { if (datei != null ) { try { datei .schließen();

if (datei != null) {

try { datei.schließen(); } catch (IOException e) { e.printStackTrace();

}

}

}

if (datei != null ) { try { datei .schließen(); } catch ( IOException e) {
12
12

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

II. WERFEN UND ABFANGEN VON EXCEPTIONS » DOKUMENTATION VON EXCEPTIONS (@THROWS)

Benutzer/Programmierer muss Exceptions catchen, daher

Dokumentation wichtig:

VON E XCEPTIONS (@ THROWS )  Benutzer/Programmierer muss Exceptions catchen, daher Dokumentation wichtig: 13
VON E XCEPTIONS (@ THROWS )  Benutzer/Programmierer muss Exceptions catchen, daher Dokumentation wichtig: 13
13
13

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

in Java | Michael Whittaker | www.michael-whittaker.de III. E XCEPTIONKLASSEN UND - TYPEN • eigene Exceptions

III. EXCEPTIONKLASSEN UND -TYPEN

www.michael-whittaker.de III. E XCEPTIONKLASSEN UND - TYPEN • eigene Exceptions für eigene Methoden •

eigene Exceptions für eigene Methoden

Laufzeit-Exceptions (RuntimeException), Fehler (Error)

UND - TYPEN • eigene Exceptions für eigene Methoden • Laufzeit-Exceptions ( RuntimeException ), Fehler (

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

III. EXCEPTIONKLASSEN UND TYPEN

» EIGENE EXCEPTIONS

Es können neben den in Java enthaltenen Exceptions auch

eigene Exceptions kreiert werden. Bedingungen:

auch eigene Exceptions kreiert werden. Bedingungen:  Unterklasse von Exception (  extends Exception )

Unterklasse von Exception (extends Exception) oder

anderer Exception sollte public sein

public class EinFaktorIstNegativException

extends IllegalArgumentException { public EinFaktorIstNegativException() {

}

super();

}

public EinFaktorIstNegativException(String msg) {

super(msg);

}

{ } super (); } public EinFaktorIstNegativException( String msg) { super (msg); } optional!

optional!

15
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
16

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

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de IV. V ERSTÄNDNISFRAGEN / Ü BUNGEN
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de IV. V ERSTÄNDNISFRAGEN / Ü BUNGEN

IV. VERSTÄNDNISFRAGEN / ÜBUNGEN

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

IV. VERSTÄNDNISFRAGEN UND ÜBUNGEN

Gültig?

try {

tuWas();

} finally { tuSchließlichDas();

}

try { tuWas (); } finally { tuSchlie ß lichDas (); } Welche Exceptions können hiermit

Welche Exceptions können hiermit abgefangen werden?

Ist die Möglichkeit sinnvoll?

catch (Exception e) {

}

18
18

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

IV. VERSTÄNDNISFRAGEN UND ÜBUNGEN (FORTS.)

Ist folgender Code richtig? Kann man es kompilieren?

try {

} catch (Exception e) {

} catch (ArithmeticException a) {

}

} catch (Exception e) { } catch (ArithmeticException a) { } Eigenarbeit: Füge der Potenzmethode (eigene)

Eigenarbeit:

Füge der Potenzmethode (eigene) Exceptions hinzu!

( Übrungen s. Server im Ordner Java_Exceptions)

19
19

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

Exceptions in Java | Michael Whittaker | www.michael-whittaker.de V. W EBLINKS UND L ITERATUR
Exceptions in Java | Michael Whittaker | www.michael-whittaker.de V. W EBLINKS UND L ITERATUR

V. WEBLINKS UND LITERATUR

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

V. W EBLINKS UND L ITERATUR

Vorlesungsfolien: http://www.infosun.fmi.uni-

passau.de/st/edu/pdp01/exceptions.pdf  The Java™ Tutorials: Essential Classes > Lesson:

The Java™ Tutorials: Essential Classes > Lesson: Exceptions:

„Java ist auch eine Insel“ von C. Ullenboom; Verlag: Galileo

Computing; ISBN: 978-3-89842-838-5; 49,90

Galileo Computing; ISBN: 978-3-89842-838-5; € 49,90  “Robust Java: Exception Handling, Testing, and

“Robust Java: Exception Handling, Testing, and Debugging” von Stephen Stelting; Verlag: Prentice Hall PTR; ISBN: 0131008528

21
21
D ANKE FÜR DIE A UFMERKSAMKEIT ! » Michael Whittaker | www.michael-whittaker.de
D ANKE FÜR DIE A UFMERKSAMKEIT ! » Michael Whittaker | www.michael-whittaker.de

DANKE FÜR DIE AUFMERKSAMKEIT!

» Michael Whittaker | www.michael-whittaker.de