5 Ausnahmen und Exceptions

Werbung
5 Ausnahmen und Exceptions
Ausnahmen
Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
• während der Objektlebenszeit können Fehler auftreten:
• Eingabefehler,
Programmfehler,
anderer Objekte etc.
ungewöhnliche
Zustände
• Problem: Fehler müssen abgefangen werden  u. U. recht
aufwändig
Java  Konzept der Ausnahmebehandlung:
• eine Ausnahme wird
Fehlerbedingung auftritt
ausgelöst,
• Anweisungen, in denen Fehler
zusammengefasst  try-Block
wenn
auftreten
eine
unerwartete
könnten,
werden
• falls es bei der Ausführung der Anweisungen im try-Block zu
Ausnahmen kommt, werden diese im folgenden catch-Block
behandelt, d. h. es wird darauf reagiert
Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
try {
// Anweisungen, in denen Fehler auftreten können
}
catch (Exception1 e){
// e = lokale Referenzvariable
// Behandlung der Ausnahmen vom Typ 1
}
catch (Exception2 e){
// Behandlung der Ausnahmen vom Typ 2
}
finally {
// Anweisungen zum Beenden des try-Blockes
}
Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
 Exceptions sind eine saubere, einfache Art, Fehler abzufangen,
ohne den Quelltext zu überfrachten
 exception = Signal an das Objekt, dass eine
eingetreten ist, die besondere Behandlung erfordert
Bedingung
Beispielprogramm:
public static void waitForReturn () {
BufferedReader din = new BufferedReader
(new InputStreamReader(System.in));
try {
System.out.println("\nBitte Return-Taste druecken...");
din.readLine();
}
catch (IOException e)
{
System.err.println("Fehler: "+e);}
Java
HS Merseburg (FH) WS 06/07
}
5 Ausnahmen und Exceptions
try-Block
• ist „normaler“ Block  wird
Ausnahmebehandlung beendet,
durch
die
Anforderung
einer
• auch durch break, continue, return
catch-Block
• kein, ein oder mehrere catch-Blöcke möglich, die auf Exceptions
des try-Blockes reagieren
• Ursachen der Exceptions werden beseitigt (Ressourcen freigeben
oder neue Ausnahmen anstoßen)
• Definition wie Methode: Parameter ist ein Objekt der Klasse
Throwable oder einer ihrer Unterklassen
Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
Ablauf der Ausnahmebehandlung:
• wenn eine Ausnahme der Klasse IOException angefordert wird,
wird der catch-Block mit einem Parameter IOException oder einer
Basisklasse von IOException angesprungen und die Anweisungen
des Blockes werden ausgeführt.
finally-Block
• Anweisungen,
die
nach
dem
try-Block
oder
der
Ausnahmebehandlung des catch-Blockes ausgeführt werden sollten
• Freigabe von Ressourcen etc. vergleichbar der finalize-Methode
beim GC
• wird immer ausgeführt, auch nach return, break, continue
• ist kein passender catch-Block vorhanden, wird erst der finallyBlock ausgeführt und dann beendet der Compiler mit dem Namen
der Ausnahme und der beim Erzeugen der Ausnahme angegebenen
Meldung
Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
• Exceptions sollten behandelt werden, wenn normalerweise nicht
auftretende Ereignisse eintreten
• wird die Ausnahme nicht
Ausnahmebehandlung in Kraft
abgefangen,
tritt
standardmäßige
Ausnahmen sind Klassen
• Exceptions sind
Ausnahmetyp
eigene
Klassen
• sind abgeleitet von der Klasse
Unterklassen Error oder Exception
gibt
eine
Klasse
Throwable
bzw.
einer

es
• Error: Probleme des Linkers beim dynamischen Laden
Programmteilen (Probleme mit der virtuellen Java Maschine)
pro
ihrer
von
• stellen schwerwiegende Fehler dar und sollten nicht abgefangen
werden
Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
Klasse Throwable enthält
•
eine Objektkomponente vom Typ String, die eine Meldung für
den Benutzer über den Grund der Exception enthält
•
eine Methode getMessage() zur Ausgabe des String
….. eigene Ausnahmen (von Exception ableiten)
class Exception1 extends Exception {
public Exception1(){
super();
}
public Exception1(String s){
super(s);
Java
}
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
Motivation für eigene Ausnahmen:
•
Reaktion auf spezielle Fehlersituationen
•
benutzerangepassten Fehlertext erzeugen
•
Daten, die Ausnahme ausgelöst haben, speichern
Beispiel: eine eingegebene Personalnummer wird nicht gefunden
Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
public class PersNrNichtGefundenException extends Exception {
public String persNr;
public Object person;
// Konstruktor
PersNrNichtGefundenException (String persNr, Object person)
super (“Keinen Namen mit der Personalnummer“+ persNr +“
gefunden.“)
// merken der Daten, die Fehler hervorgerufen haben
this.persNr = persNr;
this.person =
person;
}
}
Java
HS Merseburg (FH) WS 06/07
{
5 Ausnahmen und Exceptions
Auslösen von Ausnahmen
• erzeugen von Ausnahmen durch throw
throw new Exception1 („Die eigene Ausnahme 1 ist aufgetreten);
Beispiel:
• ändern des Namens
Personalnummer
eines
Mitarbeiters
durch
Vorgabe
einer
public void aendereNamen (String persNr, Object person)
throws PersNrNichtGefundenException {
Person pers = find(persNr);
if (pers == null)
// wenn persNr nicht vorhanden
// erzeugen eines Objektes der Klasse PersNr....
throw new PersNrNichtGefundenException(persNr, this);
// wenn persNr existiert, dann verarbeiten ...
}Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
Das throws-Konstrukt
• throws gibt an, welche Ausnahmen eine Methode erzeugen kann =
Deklaration der auslösbaren Ausnahmen (checked exceptions)
public static void main (String[] args) throws IOException
}
{
...
oder eine Liste von Ausnahmen
public void test()throws Exception1, Exception2
{
• statt
Aufzählung mehrerer Exceptions kann auch
benutzt werden
protected void finalize() throws Throwable {
// siehe Garbage Collector
super.finalize();
close();
Java
}
HS Merseburg (FH) WS 06/07
... }
Basisklasse
5 Ausnahmen und Exceptions
Möglichkeiten zur Behandlung der throws-Ausnahmen:
• Ausnahme abfangen und behandeln
• Ausnahme abfangen und auf eigene Ausnahme abbilden
 mit throw selbst auslösen
• ohne Behandlung die Methode passieren lassen
• das Fehlen von throws bedeutet, dass keine Ausnahme ausgeführt
werden kann  führt u.U. zu Compilerfehlern
Java
HS Merseburg (FH) WS 06/07
5 Ausnahmen und Exceptions
Object
Throwable
Exception
Error
AbstractMethodError
...
(andere Exceptions)
RuntimeException
...
NullPointerException
NumberFormatException
Java
HS Merseburg (FH) WS 06/07
...
IndexOutOfBoundsException
...
Herunterladen