Literatur

Weitergabe einer Exception

Da wir nun wissen, wie wir eine eigene Exception werfen können, wollen wir uns nun anschauen, wie wir eine Exception an den Aufrufer zurückgeben können. Dazu muss man den Methodenkopf erweitern. Hinter der Parameterliste folgt nun das Schlüsselwort throws gefolgt von dem Datentyp einer Exception. Dadurch wird dem Aufrufer mitgeteilt, dass eine Exception von dem angegebenem Exceptiontyp zurückgegeben werden kann und dass der Aufrufer diese, sofern er sie nicht ebenfalls weiterleitet, auffangen muss.

Schauen wir uns dazu mal ein Beispiel an:

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
 
public class DatumEingabe
{
    /* Hier wird die Exception ParseException an den Aufrufer übergeben */
    public static Date pruefeDatum(String datum) throws ParseException
    {
        DateFormat df = DateFormat.getDateInstance();
        /* Wirft ParseException, falls kein gültiges Datum übergeben wurde */
        Date d = df.parse(datum);
        return d;
    }
 
    public static void main (String [ ] args)
    {
        String datum="32.12.2000";
        try
        {
            /* Hier könnte eine Exception geworfen werden */
            DatumEingabe.pruefeDatum(datum);
        }
        catch (ParseException e)
       {
            // Fehlerbehandlung
       }
    }
}

In dem obigen Beispiel haben wir eine Startklasse. Neben der main-Methode besitzt sie auch noch die Methode pruefeDatum. Diese Methode kann bei einem fehlerhaften Datum eine sogenannte ParseException weiterleiten. Die eigentliche Exception wird in der zweiten Anweisung der Methode geworfen. Dadurch wird das folgende return nicht mehr ausgeführt. Die main-Methode muss dann um diesen Aufruf einen try-catch-Block errichten und diesen Fehler behandeln. Das Weiterleiten einer Exception ist mit jedem Exception-Typ möglich.

Da die Variable datum in der main-Methode in unserem Beispiel tatsächlich kein gültiges Datum enthält, wird die ParseException  von pruefeDatum zurückgeworfen und im catch-Block abgefangen, wo sie entsprechend behandelt werden sollte.