Script Java

Script Java Script Java

29.01.2014 Aufrufe

7.4 Exception Handling In einem Programm können also Exceptions explizit mit dem Schlüsselwort throw generiert werden. Andererseits ist es aber auch möglich, im Programm kein einziges throw statement zu verwenden und dennoch mit Exceptions konfrontiert zu werden. Dies ist dann der Fall, wenn eine Methode aufgerufen wird, die in ihrer Signatur ein throws statement deklariert. In einer solchen Situation entsteht eine Exception implizit. Will man eine Exception - sei sie nun explizit oder implizit generiert - sinngemäss behandeln, muss man einerseits ein catch statement zur Verfügung stellen und andererseits diejenigen Anweisungen, welche Exceptions provozieren, in geschweifte Klammern setzen und mit dem Schlüsselwort try bezeichnen. Ein try statement markiert jene Anweisungen, welche den Auswurf einer Exception hervorrufen können. Hierbei garantiert ein try statement, dass eine allfällige Exception in einem geeigneten catch statement gehandhabt wird. Für ein try statement gibt es also immer ein entsprechendes catch statement, welches nach diesem zu finden ist. Abbildung 7-7 demonstriert, wie eine Exception explizit geworfen und am Ort des Methodenaufrufs aufgefangen wird. e method() throws Exception { . . throw new Exception(); . . } . . try { method(); } catch (Exception e) { . . } . . Abbildung 7-7: Illustration Exception Handling Wenden wir uns nun dem Exception Handling im Beispielprogramm zu: Die Methode 192

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

7.4 Exception Handling<br />

In einem Programm können also Exceptions explizit mit dem Schlüsselwort throw<br />

generiert werden. Andererseits ist es aber auch möglich, im Programm kein einziges throw<br />

statement zu verwenden und dennoch mit Exceptions konfrontiert zu werden. Dies ist dann<br />

der Fall, wenn eine Methode aufgerufen wird, die in ihrer Signatur ein throws statement<br />

deklariert. In einer solchen Situation entsteht eine Exception implizit.<br />

Will man eine Exception - sei sie nun explizit oder implizit generiert - sinngemäss<br />

behandeln, muss man einerseits ein catch statement zur Verfügung stellen und andererseits<br />

diejenigen Anweisungen, welche Exceptions provozieren, in geschweifte Klammern setzen<br />

und mit dem Schlüsselwort try bezeichnen. Ein try statement markiert jene<br />

Anweisungen, welche den Auswurf einer Exception hervorrufen können. Hierbei garantiert<br />

ein try statement, dass eine allfällige Exception in einem geeigneten catch statement<br />

gehandhabt wird. Für ein try statement gibt es also immer ein entsprechendes catch<br />

statement, welches nach diesem zu finden ist.<br />

Abbildung 7-7 demonstriert, wie eine Exception explizit geworfen und am Ort des<br />

Methodenaufrufs aufgefangen wird.<br />

e<br />

method() throws Exception {<br />

.<br />

.<br />

throw new Exception();<br />

.<br />

.<br />

}<br />

.<br />

.<br />

try {<br />

method();<br />

}<br />

catch (Exception e) {<br />

.<br />

.<br />

}<br />

.<br />

.<br />

Abbildung 7-7: Illustration Exception Handling<br />

Wenden wir uns nun dem Exception Handling im Beispielprogramm zu:<br />

Die Methode<br />

192

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!