Einstieg

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

Erster Kontakt

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");
  }
}
itmapa.de - X2H V 0.18

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");
    }
  }
}
itmapa.de - X2H V 0.18

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.