Fehlerbehandlung
Hier lernst Du, wie du mit Fehlern bei der Programmierung umgehst.
Hierarchie der Exceptions
Die Exceptions in Java sind durch verschiedene
Klassen dargestellt. Diese Klassen wiederum sind in einer hierarchischen
Struktur angeordnet. Es folgt eine Liste der für uns wichtigsten
Exceptions.
- Exception
Die Klasse Exception ist die Basisklasse. Immer wenn man sagen möchte, dass man irgendeine beliebige Exception abfangen möchte so gibt man diesen Typ an.- RuntimeException
Die Ausprägungen dieser Klasse können während der Ausführung eines Programms theoretisch überall auftreten. Aus diesem Grund erzwingt der Compiler auch keine Behandlung dieser Exceptions. Man nennt dies “unchecked” Exceptions. Alle anderen Exceptions sind “checked” Exceptions, für die der Compiler eine Behandlung erzwingt.- ArithmeticException
Sie tritt auf, wenn das Programm eine Berechnung durchführen soll, die mathematisch nicht möglich ist. Zum Beispiel dividieren durch 0. - NullPointerException
Eine NullPointerException tritt auf, wenn auf eine Eigenschaft oder eine Methode eines Objektes zugegriffen wird, das den Wert null hat. - IndexOutOfBoundsException
Bei der Verwendung von Arrays kann es passieren, dass man auf einen Index zugreifen möchte, der zu groß oder kleiner als 0 ist. In diesen Fällen tritt eine IndexOutOfBoundsException auf.
- ArithmeticException
- IOException
Alle IOExceptions signalisieren, dass bei der Eingabe oder der Ausgabe von Daten ein Fehler aufgetreten ist.- FileNotFoundException
Sie signalisiert, dass eine Datei nicht existiert. - EOFException
Wird das Ende einer Eingabedatei unerwartet früh erreicht, so tritt eine EOFException auf.
- FileNotFoundException
- ParseException
Bei dem Versuch aus einem String zum Beispiel eine Zahl der ein Datum zu extrahieren kann es zu Fehlern kommen, wenn der String nicht korrekt formatiert ist.
- RuntimeException
Auch wenn wir in diesem Kurs
damit auskommen nur die Klasse Exception zu behandeln, wollen wir noch
kurz auf die Möglichkeiten schauen, die uns diese Hierarche bietet.
Bei
der Deklaration von Methoden können nach dem throws Schlüsselwort
mehrere Exception-Klassen durch Komma getrennt aufgeführt werden. So
könnte man zum Beispiel angeben, dass ParseException und EOFException
nicht behandeln wird. Der Compiler weiß dann aber, dass falls eine Datei
geöffnet werden soll, er die Behandlung einer FileNotFoundException
erzwingen soll.
public static int readNumberFromFile(File file) throws ParseException, EOFException { try { // lese Dateiinhalt und wandle ihn in eine Zahl um } catch (FileNotFoundException e) { // verwende einen Standardwert } }
Das Beispiel zeigt, wie man dem Compiler mitteilt, wie man mit unterschiedlichen Exceptionklassen umgehen möchte.
Eine
andere Möglichkeit ist, dass man in einem Try-Catch mehrere
unterschiedliche Exceptionklassen behandeln kann. Dafür kann man mehrere
catch-Blöcke aneinander reihen.
try { leseDatei(datei); } catch(NullpointerException e) { // könnte auftreten, wenn datei null ist } catch(FileNotFound e) { // könnte auftreten wenn die Datei nicht existiert } catch(IOException e) { // könnte auftreten wenn andere Leseprobleme auftreten } catch(Exception e) { // fängt alle übrigen Fehler auf }
Im Beispiel ist zu sehen, wie mehrere unterschiedliche Exceptionklassen
abgefangen werden können. Es ist dabei wichtig, dass zuerst die
speziellen Fälle benannt werden und erst später die allgemeinen Fälle.