Notwendigkeit von Ausnahmebehandlung
Beim Ausführen von Programmen können Ereignisse auftreten die nicht zum normalen Ablauf gehören und trotzdem sinnvoll behandelt werden müssen. Nicht normaler Ablauf bedeutet hier, dass diese Ausnahmen nicht direkt von den Eingaben oder Anweisungen des Programmcodes hervorgerufen werden. Beispiele hierfür sind
- Division einer Ganzzahl durch Null
- Lesen aus einer Datei die nicht vorhanden ist
- Fehlende Resourcen wie Hauptspeicher
- Verlust einer Netzwerkverbindung
- Feldüberlauf etc.
Es ist guter (und erforderlicher) Programmierstil mit solchen Ausnahmen umgehen zu können und sie angemessen behandeln.
Zur Erkennung und Behandlung solcher abnormaler Situationen gibt es eine Reihe von Möglichkeiten die von der gewählen Technologie abhängen können:
- Präventives Kontrollieren von potentiellen Aushnahmen
- Beispiel: Prüfung von Eingabewerten oder Zwischenwerten von Berechnungen auf potentielle Sonderdebingungen wie Nullwerte oder Feldgrenzenüberläufe
- Fehlercoderückgaben bei jedem Operationsaufruf
- Unixkommandos geben Beispielsweise immer einen Fehlerwert mit aus. Ist dieser ungleich Null liegt ein bestimmter Fehler (Ausnahme) vor
- Unterbrechungsgesteuerte (Interrupthandling) Ausnahmen
- Der reguläre Programmablauf wird verlassen und einer anderen Stelle fortgesetzt.
Bei der Behandlung von Ausnahmen steht der Entwickler in der Regel vor dem folgenden Zielkonflikten
niedriger Implementierungsaufwand mit hohem Fehlerrisiko | hoher Implementierungsaufwand mit geringem Fehlerrisiko |
übersichlicher aber wenig robuster Code | unübersichtlicher (und fehleranfälliger) Code mit vielen Präventivüberprüfungen |
Moderne Programmiersprachen und -umgebungen bieten eine Infrastruktur um die diese Zielkonflikte zu mildern. Die Technologie einer Rückgabe von Fehlerzuständen bei jeder einzelnen Operation macht es seht unwahrscheinlich, dass ein Entwickler bei jeder einzelnen Operation diesen Wert auswertet und individuelle Maßnahmen ergreift.
Die Programmiersprache Java unterstützt den Entwickler mit einem mächtigen Konzept zur Ausnahmebehandlung (Exceptionhandling) mit dem man Unterstützung in den folgenden Bereichen bekommt:
- Möglichkeit Entwickler zur Behandlung von Ausnahmen zu zwingen
- Möglichkeit potentielle Ausnahmen in größeren Codeblöcken an einer Stelle zu behandlen
- Objektorientierte Konzepte um Ausnahmehierarchien zu modellieren und damit die Behandlung ganzer Klasse von Ausnahmen zu erlauben
Beispiel einer Ausnahme in Java
Die Zuweisung des Ausdrucks auf die Variable c löst eine Ausnahme aus, da hier durch Null dividiert wird:
package Kurs2.Exception;
public class Beispiel {
public static void main(String args[]) {
int a = 18;
int b = 6;
int c = (a+b)/(3*b-18); int d = 17; // wird nicht erreicht
}
}
Bei der Division durch Null erzeugt Java ein Ausnahmeobjekt in dem die Ausnahme beschrieben ist. Wird die Ausnahme nicht vom Entwickler behandelt nutzt Java diese Information. Gibt sie auf der Konsole aus und beendet das Programm.
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Kurs2.Exception.Beispiel.main(Beispiel.java:6)
Syntax einer Java-Ausnahme auf der Konsole
Die Klassenhierarchie des Java-Laufzeitsystems
Java verwendet eine Reihe von Klassen zur Verwaltung von Ausnahmen. Bei Auftreten von Ausnahmen werden Instanzen dieser Klassen erzeugt. Mit Hilfe dieser Instanzen kann man Ausnahmen analysieren und behandeln. Anbei ein Auszug der Klassenhierarchie des Java-Laufzeitsystems:
Exceptions (Ausnahmen) in UML
UML benutzt Unterbechungskanten um Ausnahmen in Aktivitätsdiagrammen zu beschreiben. Unterbrechungskanten werden als Pfeile in Form eines Blitzes gezeichnet. Die Ausnahmebedingung wird in rechteckigen Klammern an der Unterbrechungskante dokumentiert. Da folgende Beispiel zeigt das Sortieren von Personen welches abgebrochen wird wenn eine Person eine leere Zeichenkette für den Nachnamen besitzt.
UML Notation mit Pfeil in Blitzform |
UML Notation mit Aktivitätspfeil |
---|---|
Weiterführende Quellen
- Javaworld: Java 101: Mastering Java exceptions, Part 1
- Zwei Seiten auf englisch, die alle wichtigen Kernkonzepte abdecken
- Printer-friendly version
- Log in to post comments
- 8782 views