Exceptions


Programme sind beim Lauf immer in der Gefahr, in einen Zustand zu geraten, wo es nicht sinnvoll weitergeht: z.B. eine Datei wird nicht gefunden, eine Internet-Adresse ist falsch geschrieben, jemand will mit Buchstaben (statt Zahlen) rechnen, jemand will durch Null dividieren u.a. In solchen Situationen wird in Java jeweils ein Exception-Objekt erzeugt und ausgeworfen, das vom Programm dann abgefangen werden muss. Exception-Objekte gehören zu Exception-Klassen, von denen es einige hundert gibt (Man kann auch selbst welche schreiben), siehe als Beispiele

Methoden-Aufrufe, die den Absturz des Programms zur Folge haben können, werden mit einem geeigneten Exception-Handling abgesichert. Die Form ist


try
{
      //riskanter Methoden-Aufruf;
}
catch( Exception-Klasse e)
{
      //alternative Methoden zur Fehlerbehebung
}

Alle Exceptions sind Objekte und werden der Kürze halber meistens mit dem Namen e bezeichnet, siehe oben. Falls nun beim Programm-Lauf in dem riskanten Methodenaufruf wirklich ein Problem auftritt, wird das Exception-Objekt e erzeugt und das Programm versucht die alternativen Methoden zur Fehlerbehebung aufzurufen. Falls der riskante Methoden-Aufruf problemlos abläuft, wird kein Exception-Objekt erzeugt und der ganze catch(){} wird ignoriert.

Bei manchen Methoden verweigert der Compiler die Kompilation, wenn kein try catch aussenherum gebaut ist. Die Compilerfehlermeldung sieht am DOS-Prompt folgendermassen aus:
Eine Compiler-Fehlermeldung

Der Compiler wünscht also, dass die Zeile 10 des Programms mit einem try catch vor einer möglichen MalformedURLException geschützt werden soll, wie folgt:

try
{
    u = new URL( getDocumentBase(), "URLTest.java" );      //Zeile 10
}
catch( MalformedURLException e)
{
    System.out.println( "URL falsch oder nicht gefunden" );
    System.exit( 0 );
}
Bei anderen Methoden muss der Programmierer selbst einschätzen, dass diese gefährlich werden könnten, beispielsweise infolge Fehlbedienung duch den Endverbraucher.

Beispiel: Division durch Null

Übung:

Man teste das Rechner-Programm (package nicht vergessen!).
Man lese im Handbuch zum Thema Integer, charAt() undsoweiter!
Man ergänze die fehlenden Rechenoperationen ( Minus mit -, Multiplikation mit m und nicht mit * (Frage: warum nicht?)
Man teste eine typischen Fehleingabe wie z.B.
C:\>java rechner.Rechner 3 + p
und beobachte die dadurch ausgeworfene Exception. Man sichere das Programm gegen solche Vorkommnisse!

Unentbehrlich ist das Exception-Handling, wenn Dateien geöffnet werden sollen, siehe Beispiel: Applet mit Aufruf einer Datei


www.AndreasGoedel.de