Im Normalfall erwarten wir, dass eine Methode einen bestimmten Wert berechnet/bestimmt oder gewünschte Seiteneffekte ausführt. Jedoch ist eine Methode nicht immer in der Lage die gewünschte Funktionalität wie erwartet zu liefern.
Ein Beispiel ist, wenn eine Methode die Daten einer bestimmten Datei auswerten soll, wobei die angegebene Datei nicht exestiert. Oder es soll eine Berechnung für einen Parameter durchgeführt werden, wobei der Parameter außerhalb des zulässigen Wertebereichs liegt.
Nun könnte die entsprechende Methode das laufende Programm einfach beenden, was wir eigentlich nicht wollen. Eine weitere Möglichkeit wäre es, die Methode einen kodierten Wert zurückgeben zu lassen. Das würde aber in der Aufrufhirachie zu erheblichen Problemen in der Programmierung führen.
Anstatt die Methode mit einem Rückgabewert zu beenden oder bis zum Ende
arbeiten zu lassen kommen hier die Exceptions (Ausnahmen) ins Spiel.
Die entsprechende Methode wird nicht wie erwartet bis zum Ende ausgeführt
und es wird auch kein Rückgabewert zurückgegeben,
sondern es wird eine Exception
geworfen.
Wirft eine Methode eine Exception
gibt es für die aufrufende Methode
zwei Mölichkeiten. Die Methode kann die Exception
geeignet
behandeln oder an die ihrerseits aufrufende Methode weiterreichen.
Gibt es keine weitere aufrufende Methode wird das Programm abgebrochen (zumindest bei
Single-Thread Anwendungen).
In diesem Abschnitt geht es um einen ersten Kontakt mit einer Exception
.
Erzeugen Sie dazu eine Java-Datei mit folgenden Inhalt und starten Sie die
Komplilierung aus der Eingabeaufforderung.
import java.io.*; public class FileData { public static void main(String[] args){ InputStream is = new FileInputStream("c:\\test.txt"); } }
Als Ergebnis des Kompilationsversuches erhalten Sie folgendes Ergebnis als "Antwort" vom Compiler:
FileData.java:5 unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown InputStream is = new InputStream("c:\\test.txt");
Diese Fehlermeldung ist wie folgt zu interpretieren:
In Zeile 5 des Beispieles kann es vorkommen, dass durch den Aufruf des Konstruktors von
FileInputStream
eine Exception
vom Typ java.io.FileNotFoundException
auftreten kann. Diese mögliche Exception
muss entweder behandelt oder weitergereicht
werden.
Exception
behandeln
Das nächste Beispiel FileData2
zeigt, wie die FileNotFoundException
behandelt werden kann. Dazu wird der Quelltextteil, wo eine FileNotFoundException
auftreten kann, von einem try
- Block umgeben. Tritt nun eine
FileNotFoundException
auf, wird der folgende catch
- Block zur
Ausführung gebracht, da dieser zur Aufgabe hat etwaige FileNotFoundException
abzufangen.
import java.io.*; public class FileData2 { public static void main(String[] args){ try { InputStream is = new FileInputStream("c:\\test.txt"); } catch(FileNotFoundException fnfe) { System.out.println("FileNotFoundException caught"); } } }
Tritt eine Exception
auf, die nicht vom Typ FileNotFoundException
ist, wird der catch
- Block, im Beispiel FileData2
, nicht zur
Ausführung gebracht, da dieser nur für eine FileNotFoundException
definiert ist.