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