Literatur

Werfen einer eigenen Exception

Nachdem wir nun unsere eigene Exception erstellt haben, wollen wir nun auch unsere Exception einmal werfen. Eine Exception wird mit dem Schlüsselwort throw (dt. werfen) "geworfen".

Beispiel:

 
public class ExceptionTest 
{
    public static void main (String [ ] args)
    {
        try
        {
            /* Hier wandeln wir die Übergabeparameter in Integer-Werte um */
            int dividend = Integer.parseInt(args[0]);
            int divisor = Integer.parseInt(args[1]);
 
            /* Erzeugung eines Objektes unserer Exception */
            double ergebnis =  divide(dividend,divisor);
 
            /* Anweisungen nach einer throw-Anweisung in einem Block werden nicht mehr ausgeführt */
            System.out.println("Das Ergebnis der Division lautet: "+ergebnis);
        }
         /* Hier fangen wir unsere geworfene Exception auf */
        catch(DivisionByZeroException e)
        {
             /* Hier geben wir NUR unsere Fehlermeldung aus */
            System.out.println(e.getMessage());
 
            /* Hier geben wir die Aufruferliste aus */
            e.printStackTrace();
        }
    }
 
    public static double divide (int dividend, int divisor) throws DivisionByZeroException
    {
        double ergebnis=0;
 
        if(divisor != 0)
        {
            ergebnis = dividend/divisor;
        }
        else
        {
            /* Hier wird unsere Exception geworfen */
            throw new DivisionByZeroException();
 
            /* Anweisungen nach einer throw Anweisung in einem Block werden nicht mehr ausgeführt */
        }
        return ergebnis;
    }
}
 
class DivisionByZeroException extends Exception
{
    DivisionByZeroException()
    {
        super("Der Divisor beträgt 0!");
    }
}

Im obigen Beispiel erwarten wir beim Start des Programms zwei Parameter als Integer-Werte. Der erste Parameter soll der Dividend sein und der zweite Parameter der Divisor. Anschließend rufen wir die Methode divide  auf. In dieser Methode wird der Divisor auf den Wert 0 überprüft. Nur wenn dieser von 0 verschieden ist, wird die Division durchgeführt. Andernfalls wird die Exception DivisionByZeroException geworfen, die wir,  wie im vorherigen Kapitel erläutert, implementiert haben, indem wir eine Subklasse von Exception erstellt haben.

Der try-Block würde nach dem Werfen der Exception beendet werden, d.h. danach folgende Anweisungen, wie hier die Ausgabe des Ergebnisses, würden nicht mehr ausgeführt werden.

Im catch-Block der main-Methode fangen wir unsere Exception auf. Dort lassen wir unsere Fehlermeldung "Der Divisor beträgt 0!" ausgeben. Anschließend geben wir noch durch die Methode printStackTrace die Aufruferliste aus. Jetzt könnte es sein, dass Sie sich fragen, "Wo kommt die Methode denn her, wir haben die doch gar nicht programmiert?". Das ist richtig, wir haben die Methoden auch nicht programmiert, wir haben sie nämlich von der Superklasse Exception vererbt bekommen.

Als Softwareentwickler sollte man sich immer die Aufruferliste zumindest in eine separate Fehlerdatei (z.B. error.log) schreiben lassen. Dies ermöglicht die Fehlersuche und -bekämpfung ungemein.