15 Fehler-Objekte: Werfen, Fangen, Behandeln

Ähnliche Dokumente
Tritt ein Fehler auf und wird nicht behandelt, bricht die Programm-Ausführung ab. Beispiel:

== ImplementierungvonbeliebigenFunktionen ËØÖ Ò

1 Fehler-Objekte: Werfen, Fangen, Behandeln

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Mögliche Implementierung von intern():

15 Fehlerobjekte: Werfen, Fangen, Behandeln

15 Fehlerobjekte: Werfen, Fangen, Behandeln. Idee. Fehlerklassen. Fehlerklassen

15 Fehlerobjekte: Werfen, Fangen, Behandeln

15 Fehlerobjekte: Werfen, Fangen, Behandeln. Idee. Fehlerklassen. Fehlerklassen

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Ein selbstdefinierter Fehler sollte als Unterklasse von. DieKlasse Ü ÔØ ÓÒverfügtüberdieKonstruktoren

Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. NumberFormatException

Wie schreibt bzw. wie liest man die beiden unterschiedlichen Darstellungen?

Selektion (bedingte Auswahl):

Nützliche Operationen:

... die Funktion Ñ Ò µ einer Klasse ÂÚÑ:

20.2 Schreiben mit Ö Ô

Finden der Fehler bzw. Überprüfung der Korrektheit ist ungleich schwieriger als für sequentielle Programme:

Grundlagen der Programmierung Prof. H. Mössenböck. 16. Ausnahmen (Exception Handling)

Ausnahmen (Exceptions)

Grundlagen der Fehlerbehandlung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 06: Ausnahme- und Fehlerbehandlung in Java.

21 Graphische Benutzer-Oberflächen

InderKlasse À ÐØwirddieObjekt-Methode ÐØ µneu definiert. Achtungbei ËÙ mitderreihenfolgederargumente!

Ä Ü Ð Ò ÐÝ Ä Ü Ð Ò ÐÝ Ê Ò Ö Ï Ð ÐÑ ÍÒ Ú Ö ØØ Ë ÖÐ Ò Û Ð ÐÑ ºÙÒ ¹ º Ò ÅÓÓÐÝ Ë Ú Ì Ð Ú Ú ÍÒ Ú Ö ØÝ ÚÑ Ø ºØ Ùº º Ð ¾º ÆÓÚ Ñ Ö ¾¼¼

DieUnterklasse È ÞÞ verfügtüberallemembersder Oberklasse ÓÓ wennauchnichtalledirektzugänglichsind. DieAttributeunddieObjekt-Methode ÐÓÖ µderklasse

ØØÖ ÙØ Ö ÑÑ Ö ØØÖ ÙØ Ö ÑÑ Ö Ï Ð ÐѻŠÙÖ Ö ÓÑÔ Ð Ö Ò ÔØ Ö Ê Ò Ö Ï Ð ÐÑ ÍÒ Ú Ö ØØ Ë ÖÐ Ò Û Ð ÐÑ ºÙÒ ¹ º

ËÓÖØ ÖÔÖÓ Ð Ñ ËÙ ÔÖÓ Ð Ñ ÃÓÑÔÐ Ü ØØ Ö Ò Ï ÖÙÑ Ø ÒØ Ö ÒØ Ï ÖÙÑ Ø Û Ø Ì Ð Á Ò ÖÙÒ ÂÓ ÒÒ Ë ÐÙÑ Ö Ö ËÓÖØ Ö Ò ÙÒ ËÙ Ò ¾»½

(A i ) t 1 A i f l. f l+1 = f l c l Ð. A t 1 l. c l,i = (A i ) t 1/(A i f l ) c l + = c l,i Ð

Einführung in die Programmierung mit Java

Ð ÖÙÒ Ï Ö ÓÐÙÒ Å ØÖ Ü Ð Ö Ä Ò Ö Ð ÙÒ Ý Ø Ñ Ä Ö Ø ÐÐÙÒØ Ö ÙÒ Ò Å ÌÄ ÙÒ Ð Ò Ö ËÝ Ø Ñ ÃÓÒ Ø ÓÒ Þ Ð Ô Ð Ö Ø ÈÓ ÓÒ¹ÈÖÓ Ð Ñ Å ØÖ Ü ÔÐ ØØ Ò ÅÓ ÖÒ Ø Ö Ø Ú Î Ö

a n½ x ½ +a n¾ x ¾ a nn x n = b n

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

Ð ÖÙÒ ½ ÁÒØ ÖÔÓÐ Ø ÓÒ ÔÓÐÝÒÓÑ Ð ËÔÐ Ò ¾ ÆÙÑ Ö ÁÒØ Ö Ø ÓÒ ÃÐ Æ ÛØÓÒ¹ ÓØ Ï Ø Ö ÉÙ Ö ØÙÖ ÓÖÑ ÐÒ ¾» ¾

Ö Ú Øݹ ÄÓ Ð ÐÓ ËÝÒ ÖÓÒ Þ Ø ÓÒ Ò Ï Ö Ð Ë Ò ÓÖ Æ ØÛÓÖ Å Ö Ù ÏÐ Ð Ê ØÓ ÙÖ Ù Ò Ì ÓÑ ËØ Ù Ò ÌÓÖ Ø Ò Ö ÙÒ ÁÒ Ø ØÙØ Ó ÓÑÔÙØ Ö Ë Ò Ò ÔÔÐ Å Ø Ñ Ø ÍÒ Ú Ö ØÝ Ó

h : N {0, 1, 2,..., 10} k k mod 11 10, 23, 17, 42, 13, 21, 31, 1

ÌĹËÝ Ø Ñ ¾

Eine Klassen-Deklaration besteht folglich aus Deklarationen von:

ÍÒ Ú Ö ØØ Ë ÖÐ Ò Ö ØÙÒ º ÐÐ Ñ Ò Ä Ò Ù Ø ËØÙ Ò Ò ÓÑÔÙØ ÖÐ Ò Ù Ø ÔÐÓÑ Ö Ø ÇÔØ Ñ Ð Ò Ó ËÔ Ø ÓÖ ÍÒ Ø Ë Ð Ø ÓÒ ËÝÒØ ÒÒ ÀÙÒ Ë Ö Ö Ò Ò ½ º Ë ÔØ Ñ Ö ¾¼¼ ÙÖ ÖØ

0) = 1 Ö ÒØ Ð ÓÖ u(t) = 14 t sin(2t)+sin(4t) 4 t cos(8t)] 1(t) G(s) = L{g(s)}º

Selectionsort Beispiel

¼ ÐÐ Ñ Ò ÁÒ ÐØ Ö ÎÓÖÐ ÙÒ Ò ÖÙÒ Ò ÖÙÒ ÓÒÞ ÔØ Ö ÁÒ ÓÖÑ Ø Ò ÖÙÒ Ò Ò Û Ò Ö ÁÒ ÓÖÑ Ø ÈÖÓ Ö ÑÑ Ö Ò Ò Â Ú º ¾

Ü (k) Ü < ǫ, (Ü (k) ) < ǫ, Ü (k+½) Ü (k) < ǫ

v = a b c d e f g h [v] =

ξ := Φ t = Φ T T H H t 0.2h 1

R ψ = {λ ψ, λ 0}. P ψ P H

JedesObjekt(mit ÝÒ ÖÓÒ Þ -Methoden)verfügtübereine. wartender Threads sowie die Objekt-Methoden:

ÓÒÙ ¹Å ÐÙ ËÝ Ø Ñ Ö Î Ö ÖÙÒ Û Ã Ø ÓÖ Ò ÚÓÒ Ê Ò Ò Ó Ø Ú Ò Ê Ò Þº º ÈË Þ Ð Ò ÙØÓ Ö ÀÙ Ö ÙÑ Û Ø Ø ºº ÙÒ Ò Ù Ø Ú Ò Ê Ò Ò Ø Ó Ø Ú Ñ Ö Ê Òµ Ê Ó Ö Ø Ø Ã ÒÒ Ò

ÉÙ ¹ÁÒØ Ö Ð Ò Ø ÇÖ Ò Ó ÙÖ Ø Ò ÔÀ Ç ÐÐ Ø ÓÒ Ò Ò ÒÞÝÑ ÅÓ Ð ËÝ Ø Ñ ÖØ Ø ÓÒ ÞÙÖ ÖÐ Ò ÙÒ Ñ Ò Ö ÓØÓÖ Ö ÖÙÑ Ò ØÙÖ Ð ÙÑ ÖºÖ ÖºÒ Øºµ Ò Ñ Ø ÙÖ ÙÐØØ Ö Æ ØÙÖÛ Ò Ø

ËÝÒØ ÓÖ ÎÄÁÏ Ö Ø ØÙÖ Ò Ð Ù Á È Ä Ç Å Ê Á Ì Ò Ö Ø Ñ Ö ÁÒ ÓÖÑ Ø Ö Ì Ò Ò ÍÒ Ú Ö ØØ Ã Ö Ð ÙØ ÖÒ Å ¾¼¼ ØÖ Ù Ö ½µ Öº Â Ò Ö Ò Ø ¾µ ÈÖÓ º Öº ÃÐ Ù Ë Ò Ö

v = ṡ, a = v, a = s adt v = a t+v 0 s = 1 2 a t2 +v 0 t+s 0

Ò Ù Ù Ò Ë ØÞÚ ÒØ Ð Ó Ò ÖÓ ÐÛ Ö ÙÒ µ ÙÒ ÃÓÐ ÒÚ Ò¹ Ø Ð Ñ Ø ÖÓ ÐÛ Ö ÙÒ µ B A B A ØØ ÙÒ Ö Ø ÙÖ Ñ Ò Ð ØÖÓÑ Ò Ø Ý Ö ÙÐ Ó Ö ÔÒ ÙÑ Ø ËØ ÐÐ Ò Ø Ò Ò Ö Ø ÙÖ Ý Ö

= = = = =

UNIVERSITEIT STELLENBOSCH UNIVERSITY

(t M (x)) 1/k L(M) = A. µ(x) c. Prob µ [M( x,1 m ) χ A (x)] < 1 m. x 1

Sortieralgorithmen. Nachfolgend wird die Menge der ganzen Zahlen und die darauf definierte Relation betrachtet.

ÖÐ ÙÒ Ò Ê ÒÑ Ò Ò Ä ÙÖ ÒØ È Ð Ö ¼º ÆÓÚ Ñ Ö ¾¼¼ ½» ¾

ÍÒ ÓÖÑ ÓÒ ØÖ Òع Ö Ñ ÛÓÖ ÓÖ Ø Î Ö Ø ÓÒ Ó ÁÒ Ò Ø ËØ Ø ËÝ Ø Ñ ÁËË ÊÌ ÌÁÇÆ ÞÙÖ ÖÐ Ò ÙÒ Ö Ó ØÓÖ Ö ÁÒ Ò ÙÖÛ Ò Ø Ò Öº¹ÁÒ ºµ Ö Æ ØÙÖÛ Ò ØÐ ¹Ì Ò Ò ÙÐØĐ Ø Á Ö

ÀÓÛ ÌÓ ÈÖÓÚ Ì ÓÖ Ñ ÓÖÑ ÐÐÝ Å ØØ Ã Ù Ñ ÒÒ ½ Ò Â ËØÖÓØ Ö ÅÓÓÖ ¾ ½ Ú Ò Å ÖÓ Ú ÁÒº ¼¼ Ø Ò Ï Ø ÐÚ º Ù Ø Ò Ì ½ Ñ Øغ Ù Ñ ÒÒ Ñ ºÓÑ ¾ Ô ÖØÑ ÒØ Ó ÓÑÔÙØ Ö Ë Ò Í

public static void main(string[] args) { try { kill(); } catch (RuntimeException r) { System.out.println("RunTimeException "+ r +"\n"); } catch

ÖÙÒ ½ ÖÙÒ ¾ ËÔ Ö ÈÖÓÞ ÓÖ» Ø Ù ÑÑ Ò ÙÒ ÂÓÒ Ë ÐÙÑ Ö Ö ¾»

Ausnahmen. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Î ÖØÖ Ù Ò Ú ÖÐÙ Ø Ñ ÁÒØ Ö Ò ÒÑ Ö Ø ÙÒ Ò Ø ÖÖ Ä ÙÒ Å Ð À Ò ÍÒ Ú Ö ØØ ÁÒÒ ÖÙ ÁÒ Ø ØÙØ Ö Ò Ò ÙÒ Ò ÒÞ Ò

ÒÐ ØÙÒ ØÖ Ù ÖØ ÅÓÖÔ ÓÐÓ Ì ÓÖ Ø ÅÓÖÔ ÓÐÓ È Ð ÔÔ Ï Ö ÍÒ Ú Ö ØØ Ä ÔÞ Ô Ð ÔÔºÛ ÖÙÒ ¹Ð ÔÞ º ½ º ÔÖ Ð ¾¼½ ½» ¾

Ausnahmen. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

ψ(t, Ü) = e iet/ ψ(ü).

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Das Kontrollfluss-Diagramm für Ò ¼ µ:

f (x) = t x t 1 f (x) = a x ln(a) f(x) f (x) g(x) f(x) g (x) g 2 (x)

Vorlesung Informatik II

Ausnahmen. Dr. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

= S 11 + S 21S 12 r L 1 S 22 r L

Semantic Assistance for Industrial Automation Based on Contracts and Verification DISSERTATION. zur Erlangung des akademischen Grades.

22.6 Ein Dialog-Fenster. Aufgaben: 1. Anzeige des Spiel-Ausgangs; 2. Ermöglichen der Beendigung bzw. Wiederholung des Spiels.

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

ÙÚ ÖÐ Ø º Ì Ð ÈÖÓ º Ö À Ù Ò Ð ÅÓÒØ ÒÙÒ Ú Ö ØØ Ä Ó Ò Ø ÖÖ º Ç ØÓ Ö ¾¼½ ÈÖÓ º Ö À Ù Ò Ð Ä Ó Òµ ÙÚ ÖÐ Ø º Ç ØÓ Ö ¾¼½ ½» ½

(x, y) + (0, 0) = (x, y)

Ź Ö ÑÑ Ø ÑÓ ÐÐ ÖØ Ù Ö Á ÝÒØ Ø ÇÔ Ö Ø ÓÒ Ò Ð Ð Ñ ØØ Ð ØÖ Ø Ö ÑÓÖÔ Ó ÝÒØ Ø Ö Å Ö Ñ Ð ÙÒ Ø ÓÒ Ö Òº È ÓÒÓÐÓ ÙÒ Ö ØÖÖ Ð Ü Ð µ ÁÒ ÓÖÑ Ø ÓÒ Û Ö Ö Ø ÔØ Ò Ö Ë

Σ = {a 1,...,a n } K : Σ {0,1} +. L K := n. i=1 P(a i ) K(a i ).

Laden und Speichern. Konstanten-Lade-Befehle legen einen neuen Wert oben auf dem Stack ab. ÄÇ legtdagegendenwertausderi-tenzelleobenaufdem Stack ab.

Kapitel 9. Ausnahmebehandlung in Java. Skript zur Vorlesung Einführung in die Programmierung

ÁÒ ÐØ ½ ¾ ÈÖ Ú ÒØ Ø Ú Å ÒØ Ò Ò ¹ ÎÓÖ Ù Ò ÁÒ Ø Ò ÐØÙÒ Ñ Ò Ñ ÅÓ ÐÐ ÖÙÒ ÚÓÒ ËÝ Ø Ñ Ò Ñ ØØ Ð Å Ö ÓÚ ËÝ Ø Ñ ÅÓ ÐÐ ÖÙÒ Ö Ê Ô Ö ØÙÖÞ Ø Ö ÒÙÒ Ö ÅÌÌ ÙÒ ÅÌÌÊ Ò

Abschlussklausur Cluster-, Grid- und Cloud-Computing (CGC) M.Sc. Christian Baun

α : Σ γ Σ α γ : Σ α Σ γ

Einführung in die Programmierung für NF. Fehler und Ausnahmen

= 27

8 DieTürmevonHanoi. Problem:

Granulat Extruder Spinnkopf mit Spinnpumpe und Düse. Spinnschacht mit Anblasung Spinnbühne. klimatisierter Aufspulraum Schnellwickler

ÒÛ Ò ÙÒ Ô Ø Ð Ö ÒÒ ÖÙÒ ÂÈ Ñ ÚÓÖ Ò Ò ØØ Û Ø Ð ÓÑÔÖ ÓÒ ÅÈ µ ØÛ µ ÃÓÑÔÖ ÓÒ ÚÓÒ Ù Ó Ø Ò ¾

Das Interface ÁØ ÑÄ Ø Ò Ö verlangt die Implementierung

Ö ÁÒ ÓÖÑ Ø È Ø Ë Ñ Ð Ö ØÝ Ë Ð ØÓÒ Ö Ô Å Ø Ò ÓÖ Ç Ø ÔÐÓÑ Ö Ø ÞÙÖ ÖÐ Ò ÙÒ Ö ÔÐÓѹÁÒ ÓÖÑ Ø Ö Ò Ñ ËØÙ Ò Ò ÓÑÔÙØ ÖÚ Ù Ð Ø ÚÓÖ Ð Ø ÚÓÒ Ë ÑÓÒ Ë Ö ØÖ Ù Ö Ôк¹

Ü Ò Ê Ø Ø ÖÑ Ò Ø ÓÒ ÙÒ Ö ÁÒ Ø ÓÒ Ì Ö Ø Ò Å ÖÓ ØÖÙØÙÖ Ð ÔÔÖÓ ÓÖ Ñ Ö Ò ÓÒÓÑ Ö Ý Ñ Ó ¹ ØÖ ÒÓ Ð Ê Ô Ð ÖÖ Ö ½ ¹ Ó ÓØ ÓÐÓÑ ØÖ Ø ÁÒ Ø Ô Ô Ö Á ØÙ Ý Ø ÑÔ Ø Ó Ñ

Abschnitt 7: Weitere Konzepte der oo Programmierung in Java

Ausnahmen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 27.6.

ÅÓÖÔ ÓÐÓ ÅÓÖÔ ÓÐÓ Ö Ö ÙÑ ÒØ Ó ÖÙÒ ÈÖÓÒÓÑ Ò Ð Ð Ü ÓÒ Ö ÓÒ Å ÐÐ Ö ÁÒ Ø ØÙØ Ö Ä Ò Ù Ø ÍÒ Ú Ö ØØ Ä ÔÞ Ï Ë ¾¼½½ ÛÛÛºÙÒ ¹Ð ÔÞ º» ÑÙ ÐÐ Ö Ö ÓÒ Å ÐÐ Ö ÁÒ Ø ØÙ

Ê Ø Ô Ò ÒØ ÒÓÒÐ Ò Ö ÔÖÓÔ ÖØ Ó Ô ÖÓÚ Ø Ø ØÖ ÓÒ Ð Ô ÞÓ Ð ØÖ Ñ Ø Ö Ð Ù Ò Ñ ÖÓÑ Ò Ð ÑÓ Ð Ö Ö Å Ò Ò Ù ² Î Ö Ö Ò Ø Ò Ö Ì Ò ÍÒ Ú Ö ØØ Ã Ö Ð ÙØ ÖÒ ÞÙÖ ÖÐ Ò ÙÒ

ÙØÓÑ Ø ÏÓÖØ ÓÖÑ Ö ÒÒÙÒ ÃÓÖ Ò Ò Ñ Ê Ñ Ò Ö Ä ÁÒ Ù ÙÖ Ð¹ ÖØ Ø ÓÒ Ò Ö È ÐÓ ÓÔ Ò ÙÐØØ ÙÒ Ö Ì ÓÐÓ Ö Ö Ö ¹ Ð Ü Ò Ö¹ÍÒ Ú Ö ØØ ÖÐ Ò Ò¹Æ ÖÒ Ö ÚÓÖ Ð Ø ÚÓÒ ËÓÓÖ Ã

S i. s i. p i. s i S i

15+9 = 24 8 = 41 6 = 44+4 = 45 5 = = = = = 26 7 = 13 6 = = 27+6 = = =

Systemsoftware (SYS) MSc Christian Baun

Transkript:

15 Fehler-Objekte: Werfen, Fangen, Behandeln Tritt während der Programm-Ausführung ein Fehler auf, wird die normale Programm-ausführung abgebrochen und ein Fehler-Objekt erzeugt (geworfen). Die Klasse Ì ÖÓÛ Ð fasst alle Arten von Fehlern zusammen. Ein Fehler-Objekt kann gefangen und geeignet behandelt werden. Idee: Explizite Trennung von normalem Programm-Ablauf (der effizient und übersichtlich sein sollte); und Behandlung von Sonderfällen (wie illegalen Eingaben, falscher Benutzung, Sicherheitsattacken,...) 402

Einige der vordefinierten Fehler-Klassen: Object java.lang Throwable Error RuntimeException ArithmeticException ClassCastException IndexOutOfBoundsException NegativeArraySizeException Exception IOException AWTException NullPointerException EOFException FileNotFoundException NumberFormatException 403

Die direkten Unterklassen von Ì ÖÓÛ Ð sind: ÖÖÓÖ für ernsthafte Fehler, die typischerweise zur Beendigung des gesamten Programms führen, und Ü ÔØ ÓÒ für bewältigbare Fehler oder Ausnahmen. Die Unterklasse ÊÙÒØ Ñ Ü ÔØ ÓÒ der Klasse Ü ÔØ ÓÒ fasst die bei normaler Programm-Ausführung evt. auftretenden Ausnahmen zusammen. Diese Fehler werden nicht im Kopf von Methoden deklariert und können, müssen aber nicht abgefangen werden. Alle Ausnahmen der Klasse Ü ÔØ ÓÒ außerhalb von ÊÙÒØ Ñ Ü ÔØ ÓÒ, die in einer Methode auftreten können und dort nicht selbst abgefangen werden, müssen explizit im Kopf der Methode aufgelistet werden. 404

Arten der Fehler-Behandlung: Ignorieren; Abfangen und Behandeln dort, wo sie entstehen; Abfangen und Behandeln an einer anderen Stelle. Tritt ein Fehler auf und wird nicht behandelt, bricht die Programm-Ausführung ab. Beispiel: ÔÙ Ð Ð ÖÓ ß ÔÙ Ð Ø Ø Ñ Ò ËØÖ Ò Ö µ ß ÒØ Ü ½¼ ÒØ Ý ¼ ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ Ü»Ýµ л» Ò Ó Ñ Ò µ л» Ò Ó Ð ÖÓ 405

Das Programm bricht wegen Division durch Òص¼ ab und liefert die Fehler-Meldung: Ü ÔØ ÓÒ Ò Ø Ö Ñ Ò Ú ºÐ Ò º Ö Ø Ñ Ø Ü ÔØ ÓÒ» Ý Þ ÖÓ Ø ÖÓºÑ Ò ÓÑÔ Ð Ó µ Die Fehlermeldung besteht aus drei Teilen: 1. Mitteilung des Thread, in dem der Fehler auftrat; 2. ËÝ Ø Ñº ÖÖºÔÖ ÒØÐÒ ØÓËØÖ Ò µµ Die ØÓËØÖ Ò µ-methode gibt den Namen der Klasse an, hier: Ú ºÐ Ò º Ö Ø Ñ Ø Ü ÔØ ÓÒ... gefolgt von einer Fehlermeldung, die die Objekt-Methode ØÅ µ liefert, hier:» Ý Þ ÖÓ. 3. ÔÖ ÒØËØ ÌÖ ËÝ Ø Ñº ÖÖµ Dieser Aufruf liefert die Funktion, in der der Fehler auftrat... genauer: der Angabe sämtlicher Aufrufe im Rekursions-Stack. Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. 406

Beispiel: ÆÙÑ Ö ÓÖÑ Ø Ü ÔØ ÓÒ ÑÔÓÖØ Ú º Óº ÔÙ Ð Ð Ò ß ÔÙ Ð Ø Ø ÚÓ Ñ Ò ËØÖ Ò Ö µ ß ÒØ Ü ÅÝÊ Öº ØÁÒØ ½º Ð Ø µ ÒØ Ý ÅÝÊ Öº ØÁÒØ ¾º Ð Ø µ ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ ËÙÑÑ Ø Ø Ü Ýµµ л» Ò Ó Ñ Ò µ л» Ò Ó Ð Ò ÔÙ Ð Ð ÅÝÊ Ö ß ÔÙ Ð Ø Ø ÒØ ØÁÒØ ËØÖ Ò ØÖµ ß Ù Ö Ê Ö Ø Ò Ò Û Ù Ö Ê Ö Ò Û ÁÒÔÙØËØÖ ÑÊ Ö ËÝ Ø Ñº Òµµ ÒØ Ö ÙÐØ ¼ ÓÓÐ Ò Ú Ð Ð ººº 407

Das Programm liest zwei ÒØ-Werte ein und addiert sie. Bei der Eingabe können möglicherweise Fehler auftreten:... weil keine syntaktisch korrekte Zahl eingegeben wird;... weil sonstige unvorhersehbare Ereignisse eintreffen :-) Die Behandlung dieser Fehler ist in der Funktion ØÁÒØ µ der Klasse ÅÝÊ Ö verborgen. Die ÓÓÐ Ò-Variable der Funktion ØÁÒØ µ soll den Wert ØÖÙ enthalten, wenn die Eingabe einer Zahl erfolgreich abgeschlossen ist... 408

Ð Ð Û Ð Ú Ð µ ß ËÝ Ø ÑºÓÙغÔÖ ÒØ ØÖµ ËÝ Ø ÑºÓÙغ ÐÙ µ ØÖÝ ß Ö ÙÐØ ÁÒØ ÖºÔ Ö ÁÒØ Ø ÒºÖ Ä Ò µµ Ú Ð ØÖÙ Ð Ø ÆÙÑ Ö ÓÖÑ Ø Ü ÔØ ÓÒ µ ß ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ Ð Ò Æ Ø Ö Î Ö Ù ººº µ Ð Ø ÁÇ Ü ÔØ ÓÒ µ ß ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ Ò ÔÖÓ Ð Ñ Ò ººº µ ËÝ Ø Ñº Ü Ø ¼µ Рл» Ò Ó Û Ð Ö ØÙÖÒ Ö ÙÐØ»» Ò Ó ØÁÒØ µ»» Ò Ó Ð ÅÝÊ Ö 409

... ermöglicht folgenden Dialog: Ú Ò ½º Ð Ð Ò Æ Ø Ö Î Ö Ù ººº ½º Ð ¼º Ð Ò Æ Ø Ö Î Ö Ù ººº ½º Ð ½ ¾º Ð ¾ ËÙÑÑ ¾ Ein Exception-Handler besteht aus einem ØÖÝ-Block ØÖÝ ß ss Ð, in dem der Fehler möglicherweise auftritt; gefolgt von einer oder mehreren Ø -Regeln. Wird bei der Ausführung der Statement-Folge ss kein Fehler-Objekt erzeugt, fährt die Programm-Ausführung direkt hinter dem Handler fort. Wird eine Exception ausgelöst, durchsucht der Handler mithilfe des geworfenen Fehler-Objekts sequentiell die Ø -Regeln. 410

Jede Ø -Regel ist von der Form: Ø Exc µ ߺººÐ wobei Exc eine Klasse von Fehlern angibt und ein formaler Parameter ist, an den das Fehler-Objekt gebunden wird. Eine Regel ist anwendbar, sofern das Fehler-Objekt aus (einer Unterklasse) von Exc stammt. Die erste Ø -Regel, die anwendbar ist, wird angewendet. Dann wird der Handler verlassen. Ist keine Ø -Regel anwendbar, wird der Fehler propagiert. 411

f() g() g() try... h() try... 412

f() g() g() try... h() try... Exception 413

Exception catch... h() try... 414

Exception catch... 415

Auslösen eines Fehlers verlässt abrupt die aktuelle Berechnung. Damit das Programm trotzdem nach Abfangen des Fehlers in einen geordneten Zustand kommt, ist oft Aufräumarbeit erforderlich wie z.b. das Schließen von Ein- oder Ausgabeströmen. Dazu dient die Regel Ò ÐÐÝ ß ss Ð nach einem ØÖÝ-Statement. Achtung: Die Folge ss von Statements wird auf jeden Fall ausgeführt. Wird kein Fehler im ØÖÝ-Block geworfen, wird sie im Anschluss an den ØÖÝ-Block ausgeführt. Wird ein Fehler geworfen und mit einer Ø -Regel gefangen, wird sie nach dem Block der Ø -Regel ausgeführt. Wird ein Fehler geworfen, aber von keiner Ø -Regel gefangen, wird ss ausgeführt, und dann der Fehler weitergereicht. 416

Beispiel: ÆÙÐÐÈÓ ÒØ Ö Ü ÔØ ÓÒ ÔÙ Ð Ð ÐÓÛ ß ÔÙ Ð Ø Ø ÚÓ ÐÓÛÍÔ µ ß Ç Ø Ü ÒÙÐÐ ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ Üº Ó µµ Ð ÔÙ Ð Ø Ø ÚÓ Ñ Ò ËØÖ Ò Ö µ ß ØÖÝ ß ÐÓÛÍÔ µ Ð Ø Ð Ø Ü ÔØ ÓÒ µ ß ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ Ð ÃÐ µ Ð Ò ÐÐÝ ß ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ Ä Ö Ò Ü Ò Ò ººº µ Рл» Ò Ó Ñ Ò µ л» Ò Ó Ð ÐÓÛ 417

... liefert: Ú ÐÓÛ Ä Ö Ò Ü Ò Ò ººº Ü ÔØ ÓÒ Ò Ø Ö Ñ Ò Ú ºÐ Ò ºÆÙÐÐÈÓ ÒØ Ö Ü ÔØ ÓÒ Ø ÐÓÛº ÐÓÛÍÔ ÓÑÔ Ð Ó µ Ø ÐÓÛºÑ Ò ÓÑÔ Ð Ó µ Exceptions können auch selbst definiert und selbst geworfen werden. ÔÙ Ð Ð Ð ÛÁØ ÜØ Ò Ü ÔØ ÓÒ ß Ð ÛÁØ µ ßÐ Ð ÛÁØ ËØÖ Ò µ ß ÙÔ Ö µ Рл» Ò Ó Ð Ð ÛÁØ 418

ÔÙ Ð Ð ÐÓÛ ß ÔÙ Ð Ø Ø ÚÓ ÐÓÛÍÔ µ Ø ÖÓÛ Ð ÛÁØ ß Ø ÖÓÛ Ò Û Ð ÛÁØ µ Ð ÔÙ Ð Ø Ø ÚÓ Ñ Ò ËØÖ Ò Ö µ ß ØÖÝ ß ÐÓÛÍÔ µ Ð Ø ÊÙÒØ Ñ Ü ÔØ ÓÒ Öµ ß ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ ÊÙÒÌ Ñ Ü ÔØ ÓÒ Ö Ò µ Ð Ø Ð ÛÁØ µ ß ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ Ð Û ÁØ µ ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ µ ËÝ Ø ÑºÓÙغÔÖ ÒØÐÒ º ØÅ µµ Рл» Ò Ó Ñ Ò Ð»» Ò Ó Ð Ü 419

Ein selbstdefinierter Fehler sollte als Unterklasse von Ü ÔØ ÓÒ deklariert werden. Die Klasse Ü ÔØ ÓÒ verfügt über die Konstruktoren ÔÙ Ð Ü ÔØ ÓÒ µ ÔÙ Ð Ü ÔØ ÓÒ ËØÖ Ò ØÖµ ( ØÖ ist die evt. auszugebende Fehlermeldung). Ø ÖÓÛ exc löst den Fehler exc aus sofern sich der Ausdruck exc zu einem Objekt einer Unterklasse von Ì ÖÓÛ Ð auswertet. Weil Ð ÛÁØ keine Unterklasse von ÊÙÒØ Ñ Ü ÔØ ÓÒ ist, wird die geworfene Exception erst vom zweiten Ø -Zweig gefangen. Ausgabe: Ð Û ÁØ Ð ÛÁØ ÆÙÐÐ 420

Fazit: Fehler in Java sind Objekte und können vom Programm selbst behandelt werden. ØÖÝ ººº Ø ººº Ò ÐÐÝ gestattet, die Fehlerbehandlung deutlich von der normalen Programmausführung zu trennen. Die vordefinierten Fehlerarten reichen oft aus. Werden spezielle neue Fehler/Ausnahmen benötigt, können diese in einer Vererbungshierarchie organisiert werden. 421

Warnung: Der Fehler-Mechanismus von Java sollte auch nur zur Fehler-Behandlung eingesetzt werden: Installieren eines Handlers ist billig; fangen einer Ü ÔØ ÓÒ dagegen teuer. Ein normaler Programm-Ablauf kann durch eingesetzte Ü ÔØ ÓÒs bis zur Undurchsichtigkeit verschleiert werden. Was passiert, wenn Ø - und Ò ÐÐÝ-Regeln selbst wieder Fehler werfen? Fehler sollten nach Möglichkeit dort behandelt werden, wo sie auftreten. Es ist besser spezifischere Fehler zu fangen als allgemeine z.b. mit Ø Ü ÔØ ÓÒ µ ß Ð 422