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.
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.
*/
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].");
}
}
}
DarlehenHinweis
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.
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.");
}