29.01.2014 Aufrufe

Script Java

Script Java

Script Java

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 />

Wenn es im Programmverlauf zu einem ausserordentlichen Vorkommnis kommt, wird der<br />

normale Programmverlauf abgebrochen und eine Instanz der entsprechenden Exception-<br />

Klasse generiert. Man kann sich nun vorstellen, dass diese Exception gewissermassen ins<br />

Programm geworfen wird und darauf wartet, von jemandem aufgefangen zu werden. Wer<br />

ist aber der Fänger?<br />

Im Puppentheater ist es beispielsweise der Requisiteur, welcher, sobald ein Faden reisst,<br />

das Malheur beseitigt. Im Programm ist das Schlüsselwort catch der Fänger. Dem<br />

Schlüsselwort catch folgt ein geschweiftes Klammerpaar, welches statements zur<br />

Handhabung der Situation deklariert. Diese statements werden jedoch nur beim Eintritt<br />

einer Exception ausgeführt, bei „normalem“ Programmverlauf aber übersprungen.<br />

Während den Proben fürs Marionettenspiel wurde festgelegt, welche Person für welche<br />

Panne zuständig ist; es ist also der Requisiteur und nicht die Souffleuse, welcher den<br />

Nylonfaden ersetzt. Auch im Programm ist definiert, welches catch statement welche<br />

Exception behandelt: ein catch statement deklariert in runden Klammern den Exception-<br />

Typ, den es auffängt.<br />

Wenn nun ein catch statement eine eintreffende Exception nicht aufnimmt, weil es<br />

Exceptions solchen Typs nicht behandelt, wirft es die Exception wie eine „heisse<br />

Kartoffel“ zum nächsten catch statement. Falls sich dieses der Exception wiederum nicht<br />

annimmt, geht das Spiel weiter, bis die Exception schlussendlich auf ein catch statement<br />

trifft, welches die Exception auffängt.<br />

Betrachten wir die Reise einer Exception genauer: Wenn die Exception generiert wird,<br />

sucht sie zuerst im geschweiften Klammerpaar ihres Ursprungs nach einem catch<br />

statement. Ist dort keines oder kein passendes zu finden, verlässt sie dieses und geht zu<br />

demjenigen geschweiften Klammerpaar, welches das vorhergehende enthält. Auf diese<br />

Weise arbeitet sich die Exception durch die Blockstruktur einer Methode. Verlässt sie<br />

diese, siedelt sie zu demjenigen geschweiften Klammerpaar über, in welchem der<br />

Methodenaufruf stattgefunden hat. Dort arbeitet sie sich erneut durch die ganze<br />

Blockstruktur. Auf ihrer Suche nach einem catch statement durchquert eine Exception das<br />

ganze Programm, indem sie sukzessive das zuletzt ausgeführte geschweifte Klammerpaar<br />

nach einem geeignetem catch statement durchforstet und hierdurch die<br />

Anweisungsreihenfolge des Interpreters von hinten her aufrollt. Trifft eine Exception auf<br />

ihrem Weg zurück bis zur main() Methode nie auf ein erfordertes catch statement, gibt<br />

der Interpreter eine entsprechende Fehlermeldung aus.<br />

Wer wirft nun aber eine Exception? Eine Exception wird innerhalb einer Methode<br />

generiert und mit dem Schlüsselwort throw geworfen.<br />

Falls nun eine solche Methode die generierte Exception nicht behandelt, also kein<br />

entsprechendes catch statement aufweist, wirft sie die Exception weiter. Dies muss sie in<br />

ihrer Signatur mit dem Schlüsselwort throws deklarieren.<br />

191

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!