Ausnahme
Eine Ausnahme (kurz für „exceptional event“) ist ein Fehler oder ein unerwartetes Ereignis, das auftritt, während ein Programm ausgeführt wird. Wenn eine Ausnahme auftritt, unterbricht sie den Ablauf des Programms. Wenn das Programm die Ausnahme behandeln und verarbeiten kann, wird es möglicherweise weiter ausgeführt. Wird eine Ausnahme nicht behandelt, muss das Programm möglicherweise beendet werden.
Mehrere Programmiersprachen unterstützen Ausnahmen, obwohl sie auf unterschiedliche Weise verwendet werden. Ausnahmen sind beispielsweise ein wesentlicher Bestandteil der Sprache Java und werden häufig verwendet, um den Ablauf eines Programms zu steuern. Java enthält eine Exception-Klasse mit Dutzenden von Unterklassen, etwa TimeoutException, UserException und IOException. Unterklassen wie IOException enthalten spezifischere Ausnahmen wie FileNotFoundException und CharacterCodingException, die „ausgelöst“ werden können, wenn eine Datei nicht gefunden wird oder die Zeichenkodierung einer Zeichenfolge nicht erkannt wird.
Andere Sprachen verwenden Ausnahmen nur, um grundlegende Laufzeitfehler abzufangen, etwa wenn Speicher nicht zugewiesen werden kann oder Fehler auf Systemebene auftreten. Beispielsweise kann ein C++-Programm die Ausnahme bad_alloc auslösen, wenn kein Speicher zugewiesen werden kann, und die Ausnahme system_error, wenn das Betriebssystem einen Fehler erzeugt.
Behandlung von Ausnahmen
Ein gut geschriebenes Computerprogramm prüft auf Ausnahmen und behandelt sie angemessen. Das bedeutet, dass der Entwickler mögliche Ausnahmen prüfen und Code zu ihrer Verarbeitung schreiben muss. Wenn ein Programm Ausnahmen gut behandelt, können unerwartete Fehler erkannt und verwaltet werden, ohne dass das Programm abstürzt.
Ausnahmen werden ausgelöst, wenn sie auftreten, und von anderem Code im Programm „abgefangen“. Sie können ausdrücklich mithilfe der throw-Anweisung oder implizit innerhalb einer try-Klausel ausgelöst werden. Unten sehen Sie ein Beispiel für die „try/catch“-Syntax in Java. Der folgende Code versucht, durch null zu teilen, löst jedoch eine ArithmeticException-Ausnahme aus und gibt als Ergebnis 0 zurück.
1. int a = 11;
2. int b = 0;
3. int result = 0;
4. try {
5. int c = a / b;
6. result = c;
7. } catch(ArithmeticException ex) {
8. result = 0;
9. }
10. return result;
In Zeile 5 wird eine Ausnahme ausgelöst (wenn 11 durch 0 geteilt wird), sodass der Rest der try-Anweisung (Zeile 6) nicht ausgeführt wird. Stattdessen wird die Ausnahme in Zeile 7 abgefangen und ein Ergebnis von 0 zurückgegeben.
Testen Sie Ihr Wissen