Exceptions

Werbung
Exceptions
Einführung in Java
Folie 1 von 15
12. Mai 2011
Ivo Kronenberg
Inhalt
•
Werfen und Behandeln von Ausnahmen
•
Exceptionklassen (Hierarchie)
•
Eigene Exceptiontypen
•
Exceptionsignaturen
•
Stack Trace
•
Exception Chaining
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 2 von 15
Exceptions (Ausnahmen)
•
Laufzeitfehler:
– treten zur Laufzeit auf
– Beinflusen Programmablauf
•
Ursachen für Ausnahmen:
– Logische Fehler
– Bedienungsfehler
– Laufzeitsystem
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 3 von 15
Ausnahmen werfen
•
Deklaration (Methodensignatur) und werfen:
void eineMethode() throws Exception {
Deklaration
…
von Exception
throw new Exception();
Werfen
}
von Exception
•
Durch das Werfen einer Exception wird der
normale Kontrollfluss einer Methode beendet
(analog einem return Statement)
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 4 von 15
Ausnahmen behandeln
•
1
Try-Catch Block:
…
try {
… // regulärer Code
…
} catch(Exception ex) {
… // Fehlerbendlung
}
…
•
Try-Block wird sofort beendet, wenn Exception
geworfen wird.
•
Catch-Block wird nur durchlaufen, wenn eine
Exception vom gefangenen Typ geworfen wird.
Exceptions | Ivo Kronenberg
2
12. Mai 2011
Folie 5 von 15
Exceptionklassen
•
Throwable ist Basisklasse aller Exception
•
Fehler aus VM (Laufzeitsystem) sind
typischerweise vom Typ Error.
Throw able
Error
Exception
Laufzeitsystem
RuntimeException
IllegalArgumentException
Exceptions | Ivo Kronenberg
Bedienungsfehler
Logische Fehler
NullPointerException
12. Mai 2011
Folie 6 von 15
Benutzerdefinierte Exceptions
•
Defintion neuer Exception:
class ProgrammException extends Exception {
ProgrammException() { super(); }
}
•
Konstruktoren Exception:
Exception()
Exception(String message)
Exception(String message, Throwable cause)
Exception(Throwable cause)
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 7 von 15
Exceptionsignaturen
•
Geworfene Exceptions müssen kompatibel sein mit
Exceptiontypen auf Methodensignatur.
•
In der Methodensignatur können mehrer Exceptiontypen
deklariert werden:
void methodeA()
throws EOFException, FileNotFoundException
{…}
•
Für überladene Methodensignaturen sind Exception
irrelevant.
•
Bei Redefinition von Methode (überschreiben) dürfen
Exceptiontypen eingeschränkt aber nicht erweitert werden.
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 8 von 15
Durchreichen von Exceptions
•
Exceptions müssen nicht abgefangen und
behandelt werden.
•
Exceptions können an Aufrufer weitergereicht
werden:
class Demo {
private void methodeA() throws Exception { … }
public void methodeB() throws Exception {
Unbehandelt
methodeA();
weiterreichen
}
public void methodeC() throws Exception {
try {
methodA();
} catch(Excepion e) {
… // z.B. Fehlerbehandlung
Gleiche Exception
throw e;
weiterreichen
}
}
}
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 9 von 15
Runtime Exceptions
•
Müssen nicht in Methodensignatur deklariert
werden.
•
Häufiger Verwendung in API Klassen
•
Werden typischerweise geworfen, wenn
logischer Check durchfällt.
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 10 von 15
Error
•
Müssen nicht in Methodensignatur deklariert
werden.
•
Reserviert für Systemfehler (Laufzeitsystem).
•
Typischerweise sollte beim Auftreten eines
Systemfehlers das Programm beendet werden.
•
Typische Error-Klassen in API:
OutOfMemoryError
NoClassDefFoundError
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 11 von 15
Mehrere Catch-Klauseln
•
Pro try-Block können mehrere catch-Klauseln
angegebn werden.
•
Jede catch Klausel verarbeitet ein anderen
Exception-Typ.
•
Zur Fehlerbehandlung kommt die erste
passende catch-Klausel zum Zuge.
– Reihenfolge ist entscheidend.
– Nicht zwingend die am besten passende Exception.
– Passt keine der Catch-Klauseln, wird die Exception
automatisch weitergeworfen.
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 12 von 15
Stack Trace
•
Ausgabe von Stack Trace:
– Throwable.printStackTrace()
– Logging Frameworks
– Ausserordentlich Programmbeendigung
Message
Exception
Exception in thread "main" java.io.IOException: The system cannot find the path
specified
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.checkAndCreate(File.java:1704)
Call Stack
at java.io.File.createTempFile(File.java:1793)
at java.io.File.createTempFile(File.java:1830)
at ch.sws.java.demo.exceptions.CatchKlauseln.main(CatchKlauseln.java:9)
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 13 von 15
Finally-Block
•
Abschlussbehandlung unabhängig von
aufgetretener Exception.
•
Illustration:
1
try {
… // regulärer code
} catch(Exception ex) {
… // Fehlerbehandlug
} finally {
… // Aufräumlogik
}
Exceptions | Ivo Kronenberg
2
3
Wird in jedem
Fall durchlaufen
12. Mai 2011
Folie 14 von 15
Exception Chaining
•
Gekapselte Weitergabe von Root-Exception
(Ursache):
– Implementationdetails verstecken
– Ursache für Aufrufer irrelevant
•
Konstruktoren Exception mit Cause:
Exception()
Exception(String message)
Exception(String message, Throwable cause)
Exception(Throwable cause)
Throw able
•
-cause
Abfrage Kette von Exceptions:
ex.getCause();
Throw able
-cause
Throw able
Exceptions | Ivo Kronenberg
12. Mai 2011
Folie 15 von 15
Herunterladen