Ausnahmen Flashcards
(6 cards)
Was ist eine Ausnahme?
Ein abnormales Ereignis, das die Auführung einer Methode (auch Konstruktor) unterbricht.
Eine Ausnahme stellt ein Ereignis zur Laufzeit des Programms dar.
Beispiele für Ausnahmen
Mangel an Speicherplatz
unzulässiger Index beim Zugriff auf Array, Liste oder Zeichenkette
Versuch, Methode für null-Referenz aufzurufen
Versuch der Typkonvertierung zwischen unverträglichen Typen
Problem bei Dateizugriff, z. B. ungültiger Dateiname
Verletzung einer Zusicherung (assert)
Konsequenzen einer Ausnahme
Die Methode, in der die Ausnahme auftritt, versagt.
Dies stellt für den Aufrufer der Methode selbst wieder eine Ausnahme
dar.
2 Die Methode erholt sich durch eine Ausnahmebehandlung
(engl. exception handling) von der Ausnahme und arbeitet dann
weiter.
Konstrukt in Java zur Ausnahmebehandlung
Ausnahmesituationen und ihre Behandlung
sind keine Neuerung von Java, sondern
waren schon immer Teil eines defensiven Programmierstils.
Java stellt dafür jedoch besondere Konstrukte zur Verfügung.
Ausnahmen sind Instanzen der Klasse Throwable oder ihrer
Unterklassen.
try und catch
Die Behandlung von Ausnahmen bezieht sich auf eine Folge von Anweisungen.
Diese Anweisungsfolge wird im try-Block zusammengefasst.
Es wird versucht (engl. try), die Anweisungen des Blocks auszuführen.
Dabei können Ausnahmen auftreten.
Diese können gefangen (engl. catch) und in einem catch-Block oder
in catch-Blöcken behandelt werden.
try-Anweisung und allgemeine Struktur
Ein try-Block und eine Folge von catch-Blöcken bilden die
try-Anweisung. Die allgemeine Struktur ist:
try {
/* Dies ist der normale Code, in dem Ausnahmen
* auftreten können.
/
…
} catch (Exceptiontyp1 e1) {
/ catch-Block, um Ausnahmen der Klasse
* Exceptiontyp1 zu fangen und zu behandeln
/
…
}
catch (Exceptiontyp2 e2) {
/ catch-Block, um Ausnahmen der Klasse
* Exceptiontyp2 zu fangen und zu behandeln
/
…
}
… // weitere catch-Blöcke
} finally {
/ Dieser Block wird immer ausgeführt, unabhängig davon,
* ob bei Ausführung des try-Blocks eine Ausnahme auftrat
* oder nicht. Er wird auch ausgeführt, wenn eine Ausnahme
* zuvor gefangen und behandelt wurde.
* Der finally-Block ist optional, wenn die try-Anweisung
* mindestens einen catch-Block enthält.
*/
…
}