Ausnahmenbehandlung in Java Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien Was sind Exceptions? n n n Eine Ausnahme (Exception) ist ein Objekt einer Unterklasse von Throwable Eine Ausnahme tritt dann auf, wenn bei der Programmausführung eine semantische Regel verletzt wird. (z.B. x[-4], Division durch 0) In manchen Fällen kann man Exceptions durch if ... else abfangen, allerdings ergibt sich daraus ein hoher Programmieraufwand Exception Handling n n n Zur Laufzeit wird eine Ausnahme erzeugt die in einem Ausnahmebehandler (Exception Handler) aufgefangen und bearbeitet wird Ein Block um alle "kritischen Stellen" reicht Nach einem Sprung in den Ausnahmebehandler wird nicht mehr zurückgesprungen Beispiel 1 public class Exception1 { public static void main (String args[]) { int[] feld = new int[100]; for (int i=0; i<=99; i++) { feld[i] = i; } Zuweisung for (int i = 0; i <= 99; i++) { System.out.println("i = " + feld[i]); } } } Ausgabe Beispiel 1 public class Exception2 { public static void main (String args[]) { int[] feld = new int[100]; for (int i=0; i<=99; i++) { feld[i] = i; } Fehler for (int i = 0; i <= 100; i++) { System.out.println("i = " + feld[i]); } } } Der Interpreter (nicht der Compiler!) bricht die Ausführung ab Beispiel 1 public class Exception3 { public static void main (String args[]) { int[] feld = new int[100]; try { for (int i=0; i<=99; i++) { feld[i] = i; } try-Block for (int i = 0; i <= 100; i++) { System.out.println("i = " + feld[i]); } catch-Block } catch(ArrayIndexOutOfBoundsException e) { System.out.println("Fehler!"); } System.out.println("Hier geht es ganz normal weiter"); } } Das Programm wird ausgeführt! ExceptionBeispiel1 Angabe Aufgabe: Schreiben Sie ein Programm "ExceptionBeispiel1" das in einer for-Schleife mit einer int-Zählvariablen von 10 bis –10 rückwärts zählt. In der Schleife wird die Zahl 100 durch den Zählwert dividiert und ausgegeben. Um die Division durch Null abzufangen verwenden Sie die Ausnahme "ArithmeticException". ExceptionBeispiel1 Lösung public class ExceptionBeispiel1 { public static void main (String args[]) { try { for (int i = 10; i >= -10; i--) { System.out.println(100/i); } } catch (ArithmeticException e) { System.out.println("Das geht nicht"); } } } throws n n n Anstatt eine Mehthode mit try – catch zu behandeln ist auch eine Weiterleitung mit dem Schlüsselwort throws möglich. Dieses leitet die Verantwortung für die Behandlung der Ausnahme an die aufrufende Methode weiter. Beispiel einer Methodendeklaration mit throws: public void meineMethode() throws NewException {}