Script Java

Script Java Script Java

29.01.2014 Aufrufe

7.4 Exception Handling keine Tokens mehr im String vorhanden sind. Wenn also beispielsweise ein Benutzer „8.00“ anstatt „8:00“ eingibt, würde eine NoSuchElementException generiert, da der StringTokenizer gar keinen Separator vorfindet. In der Methode setTime() wird wohl eine durch nextElement() hervorgerufene NoSuchElementException abgeblockt, dafür aber eine NumberFormatException generiert, die nicht in der Methode selber behandelt wird. Am Ende der Methode setTime() erfolgt der Aufruf von setTime() 1 . Hierbei werden die Parameter Integer.parseInt(hString), Integer.parseInt(mString) übergeben. Die in der Klasse Integer 2 deklarierte Klassenmethode parseInt() konvertiert einen als Parameter erhaltenen String zu einem int. Dieser wird als Wert zurückgegeben. Sollten jedoch die im String enthaltenen Zeichen - mit Ausnahme des ersten Zeichens, welches auch ein Minuszeichen darstellen kann - keine Zahlen sein, wird eine NumberFormatException geworfen. In der Methode setTime() kann also einmal explizit im catch statement und einmal implizit durch die Methode parseInt() eine NumberFormatException generiert werden. Da innerhalb der Methode aber kein passender catch statement vorhanden ist, wird die NumberFormatException weitergeworfen, was das Schlüsselwort throws in der Signatur bestätigt. Schauen wir nun in der aufrufenden Methode nach, ob diese ein catch statement für eine NumberFormatException deklariert. In den geschweiften Klammern des letzten else statement 3 der Methode actionPerformed() in der Klasse UserFrame wird die Methode setTime() aufgerufen: else { try {time.setTime(text.getText());} catch (NumberFormatException e) { message.setText("Invalid Format"); return; } } An dieser Stelle im Programm sehen wir auch den Methodenaufruf von setTime() mit dem Schlüsselwort try versehen und finden das gesuchte catch statement. Das 1 Wieder ein Beispiel für method overloading. Dieses Mal ist die Methode setTime() gemeint, welche Parameter vom Typ int erwartet. 2 Siehe Abschnitt 4.3.3. 3 Da alle anderen Fälle in den vorhergehenden else statements abgeklärt wurden, muss es sich beim letzten else statement um den Fall handeln, dass der Benutzer die RETURN-Taste im TextField gedrückt hat. 194

7.4 Exception Handling Schlüsselwort return bewirkt, dass die Programmkontrolle an den Ort des Methodenaufrufs zurückgeht und somit die Methode actionPerformed() verlassen wird. Wenn der Benutzer also in irgendeiner Weise ein ungültiges Zeitformat eingibt, wird die Nachricht „Invalid Format“ durch das Label message ausgegeben. Ansonsten nimmt das Programm seinen üblichen Verlauf, die eingegebene Zeit wird angezeigt. Siehe auch: 7.4.2.1 7.4.2 Syntax 7.4.2.1 Exception Handling Das Konzept des Exception Handling erlaubt, ausserordentliche Vorkommnisse innerhalb eines Programms zu erfassen und zu beheben, so dass ein weiterer, ungestörter Programmverlauf möglich ist. Hierbei werden sowohl die kritischen Anweisungen als auch diejenigen zur Behebung der Situation speziell mit den Schlüsselwörtern try bzw. catch markiert und heben sich dadurch als Bestandteil des Exception Handling vom übrigen Programm-Code ab. Das Eintreten einer Exception bewirkt, dass der normale Programmfluss unterbrochen wird: die momentan auszuführenden Anweisungen werden unvollendet verlassen, damit nach einem geeigneten Fänger für die Exception gesucht werden kann. Die Suche nach einem passenden Fänger beginnt dort, wo sich die Exception ereignet hat, geht über zur aufrufenden Methode und erstreckt sich schliesslich über das ganze Programm. Sie entspricht der umgekehrten Ausführungsreihenfolge des Interpreters. Nach Handhabung einer Exception wird mit der Programminterpretation nach demjenigen catch statement weitergefahren, welches die Exception behandelt hat. Wird eine Exception jedoch nirgends im Programm abgefangen, gibt der Interpreter eine entsprechende Fehlermeldung auf der Konsole aus. Eine Instanz einer Exception-Klasse kann entweder explizit durch das Schlüsselwort throw oder implizit durch Verwendung einer exception-generierenden Methode erzeugt werden. Generiert eine Methode eine Exception, welche sie aber nicht handhabt, muss sie dies mittels dem Schlüsselwrot throws in ihrer Signatur deklarieren. Hierzu bilden aber Exceptions der Klassen RuntimeException bzw. Error eine Ausnahme. Da diese häufig vorkommen, muss ihr Auftreten nicht durch das Schlüsselwort trhows deklariert werden. Will man eine Exception beheben, muss man jene Anweisungen, welche eine Exception hervorrufen können, in geschweifte Klammern setzen, mit dem Schlüsselwort try markieren und ein passendes catch statement deklarieren. Dieses ist nach dem try 195

7.4 Exception Handling<br />

Schlüsselwort return bewirkt, dass die Programmkontrolle an den Ort des<br />

Methodenaufrufs zurückgeht und somit die Methode actionPerformed() verlassen<br />

wird. Wenn der Benutzer also in irgendeiner Weise ein ungültiges Zeitformat eingibt, wird<br />

die Nachricht „Invalid Format“ durch das Label message ausgegeben. Ansonsten nimmt<br />

das Programm seinen üblichen Verlauf, die eingegebene Zeit wird angezeigt.<br />

Siehe auch: 7.4.2.1<br />

7.4.2 Syntax<br />

7.4.2.1 Exception Handling<br />

Das Konzept des Exception Handling erlaubt, ausserordentliche Vorkommnisse innerhalb<br />

eines Programms zu erfassen und zu beheben, so dass ein weiterer, ungestörter<br />

Programmverlauf möglich ist. Hierbei werden sowohl die kritischen Anweisungen als auch<br />

diejenigen zur Behebung der Situation speziell mit den Schlüsselwörtern try bzw. catch<br />

markiert und heben sich dadurch als Bestandteil des Exception Handling vom übrigen<br />

Programm-Code ab.<br />

Das Eintreten einer Exception bewirkt, dass der normale Programmfluss unterbrochen<br />

wird: die momentan auszuführenden Anweisungen werden unvollendet verlassen, damit<br />

nach einem geeigneten Fänger für die Exception gesucht werden kann. Die Suche nach<br />

einem passenden Fänger beginnt dort, wo sich die Exception ereignet hat, geht über zur<br />

aufrufenden Methode und erstreckt sich schliesslich über das ganze Programm. Sie<br />

entspricht der umgekehrten Ausführungsreihenfolge des Interpreters. Nach Handhabung<br />

einer Exception wird mit der Programminterpretation nach demjenigen catch statement<br />

weitergefahren, welches die Exception behandelt hat. Wird eine Exception jedoch nirgends<br />

im Programm abgefangen, gibt der Interpreter eine entsprechende Fehlermeldung auf der<br />

Konsole aus.<br />

Eine Instanz einer Exception-Klasse kann entweder explizit durch das Schlüsselwort<br />

throw oder implizit durch Verwendung einer exception-generierenden Methode erzeugt<br />

werden.<br />

Generiert eine Methode eine Exception, welche sie aber nicht handhabt, muss sie dies<br />

mittels dem Schlüsselwrot throws in ihrer Signatur deklarieren. Hierzu bilden aber<br />

Exceptions der Klassen RuntimeException bzw. Error eine Ausnahme. Da diese<br />

häufig vorkommen, muss ihr Auftreten nicht durch das Schlüsselwort trhows deklariert<br />

werden.<br />

Will man eine Exception beheben, muss man jene Anweisungen, welche eine Exception<br />

hervorrufen können, in geschweifte Klammern setzen, mit dem Schlüsselwort try<br />

markieren und ein passendes catch statement deklarieren. Dieses ist nach dem try<br />

195

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!