18.2 Gezieltes Auslösen einer Ausnahme

Ausnahmen können im Quellcode auch gezielt ausgelöst werden.

Beispiel

Um sicherzustellen, dass ein Attribut nur bestimmte Werte annimmt, prüft die entsprechende set-Methode den als Argument übergebenen Wert. Liegt er innerhalb des gewünschten Wertebereichs wird er dem entsprechenden Attribut zugewiesen. Andernfalls wird eine Ausnahme ausgelöst.

JAVA
public class Darlehen {

    private double zinssatz;
    // ...

    /**
     * Legt den für das Darlehen fälligen Zinssatz in % fest.
     *
     * @param   pZinssatz                 Erlaubt sind Werte im Bereich [0.0; 100.0].
     * @throws  IllegalArgumentException  Wenn pZinssatz außerhalb des vorgegebenen Wertebereichs liegt.
     */
    public void setZinssatz(double pZinssatz) {
        if(pZinssatz>=0 && pZinssatz<=100) {
            this.zinssatz = pZinssatz;
        }
        else {
            throw new IllegalArgumentException("Der gewünschte Zinssatz von " + pZinssatz + " liegt außerhalb des erlaubten Wertebereichs von [0.0; 100.0].");
        }
    }
    
}
Abb. 18-11: Fachklasse Darlehen
Hinweis

Da IllegalArgumentException eine Unterklasse von RuntimeException ist, handelt es sich um eine nicht geprüfte Ausnahme (engl. unchecked exceptions). Im Kopf der betreffenden Methode muss daher keine throws-Klausel angegeben werden.

Wird zum Beispiel in einer GUI-Klasse die entsprechende set-Methode aufgerufen und dabei als Argument ein vom Benutzer eingegebener Wert übergeben, kann der Methodenaufruf in eine try-catch-Anweisung eingebettet werden. Falls nun eine Ausnahme ausgelöst wird, kann diese mit einer entsprechenden Information an den Benutzer behandelt werden.

JAVA
try {
    setZinssatz(Double.parseDouble(tfZinssatz.getText()));
}
catch(NumberFormatException nfEx) {
    JOptionPane.showMessageDialog(null, "Der eingegebene Wert '" + tfZinssatz.getText() + "' stellt keine gültige Dezimalzahl dar.");
}
catch(IllegalArgumentException iaEx) {
    JOptionPane.showMessageDialog(null, "Der eingegebene Wert '" + tfZinssatz.getText() + "' liegt außerhalb des erlaubten Bereichs von 0 bis 100.");
}
Abb. 18-11: Ausnahmebehandlung