Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
7.4 Exception Handling<br />
public void setTime (String s) throws NumberFormatException {<br />
String hString, mString;<br />
StringTokenizer tokenizer = new StringTokenizer(s,":");<br />
try {<br />
hString = tokenizer.nextToken();<br />
mString = tokenizer.nextToken();<br />
}<br />
catch (NoSuchElementException e) {<br />
throw new NumberFormatException();<br />
}<br />
setTime(Integer.parseInt(hString),Integer.parseInt(mString));<br />
}<br />
setzt die Uhrzeit gemäss der Eingabe durch den Benutzer. Hierbei lässt sie aber nur eine<br />
korrekte Zeitangabe zu.<br />
In der Methodenschnittstelle wird deklariert, dass die Methode setTime() eine Instanz<br />
der Klasse NumberFormatException werfen kann. NumberFormatException ist<br />
eine Unterklasse der Klasse IllegalArgumentException, die ihrerseits wiederum<br />
eine Unterklasse von RuntimeException ist. Sie signalisiert, dass der Versuch einen<br />
String zu einem Integer-Datentyp zu konvertieren missglückt ist, da der String nicht das<br />
erforderte Format aufweist.<br />
Ein Blick in den Methodenrumpf verrät, dass eine Instanz der Klasse<br />
NumberFormatException explizit geworfen wird:<br />
throw new NumberFormatException();<br />
Da sich diese Anweisung aber innerhalb eines catch statement befindet, muss ihre<br />
Durchführung vom Auftreten einer weiteren Exception abhängig sein. Diese Exception<br />
muss gemäss Deklaration vom Typ NoSuchElementException sein.<br />
Es fragt sich nun, welche Anweisungen den Auswurf einer Instanz von<br />
NoSuchElementException provoziert haben. Diese müssen durch das Schlüsselwort<br />
try gekennzeichnet sein und entweder explizit oder implizit eine<br />
NoSuchElementException werfen.<br />
Oberhalb des catch statement ist auch das erwartete try statement zu finden; es kapselt in<br />
sich die Anweisungen<br />
try {<br />
hString = tokenizer.nextToken();<br />
mString = tokenizer.nextToken();<br />
}<br />
Da in diesen Anweisungen kein throw statement vorhanden ist, muss die<br />
NoSuchElementException implizit generiert werden, es muss also eine Methode<br />
aufgerufen werden, welche ihrerseits eine solche Exception generiert.<br />
Die in der Klasse StringTokenizer (siehe Abschnitt 7.4.1.1) deklarierte Methode<br />
nextToken() wirft eine Instanz der Klasse NoSuchElementException, wenn<br />
193