9.19.1 Die Behandlung von Ausnahmebedingungen ("try-catch"-Anweisung)

Die Behandlung einer Ausnahmebedingung erfolgt durch eine try-catch-Anweisung, die genau jener von Java entspricht. Ebenso läuft - völlig analog zu Java - auch der Ausnahmebehandlungsmechanismus ab ("catch-or-throw"-Regel). Allerdings müssen - im Gegensatz zu Java - Ausnahmen nicht zwingend behandelt werden. Aus diesem Grund gibt es in C# auch keine throws-Klausel für den Methodenkopf!

Das folgende sehr einfache Programmbeispiel soll nur die Ausnahmebehandlung von C# zeigen:

Klasse TryCatchBsp
/* * TryCatchBsp.cs */ using System; using System.IO; namespace Beringer.oopBuch.EinAusgabe { /** <summary> Einfache Applikation zum Testen von Exceptions. <p> Es wird eine nichtnegative ganze Zahl über die Tastatur gelesen. <br /> Eine 'FormatException' behandelt standardmäßig die Eingabe einer ganzen Zahl. Durch die Eingabe einer negativen Zahl wird diese Exception explizit ausgelöst. </p> <p> Seit: November 2004 </p> <seealso cref="ProgrammTryCatch" /> Autor: Beringer Alfred </summary> <remarks> Der Einfachheit halber beinhaltet diese Klasse Elemente einer DAO-Klasse und einer Applikationsklasse! </remarks> */ public class TryCatchBsp { // --------------------------------------------------------------------- // Klassenkonstante // --------------------------------------------------------------------- /** <summary> Zeichenkette, die das Ende der Tastatureingabe definiert. </summary> <remarks> Dient als zusätzliche EOF-Kennzeichnung (zusätzlich zur Eingabe von '^Z') </remarks> */ private static readonly String EOF = "EOF"; // --------------------------------------------------------------------- // Instanzattribute // --------------------------------------------------------------------- /// Zu erfassender Datenwert private int zinsfuss; private bool eof = false; // --------------------------------------------------------------------- // Instanzmethoden // --------------------------------------------------------------------- /// Start-Methode zum Testen der Applikation public void Start() { bool ok; ok = lesen(); while ( !eof ) { if (ok) { Console.WriteLine("Zinsfuss = " + zinsfuss); // Verarbeitung bei korrekter Eingabe } ok = lesen(); } } // --------------------------------------------------------------------- // Private Instanzmethoden // --------------------------------------------------------------------- /** <summary> Liest eine Zahl über die Tastatur ein. </summary> <remarks> Eine negative Zahl löst explizit eine 'FormatException' aus (analog zur Eingabe von beispielsweise Buchstaben) </remarks> <returns> true, wenn eine nichtnegative ganze Zahl gelesen wurde </returns> */ private bool lesen() { String eingabe; try { eingabe = lesenEingabe( "Bitte ganzzahligen nichtnegativen Zinsfuss eingeben (Ende: " + EOF + " oder ^Z):"); if (eof) { return true; // EOF ist kein Fehler } zinsfuss = int.Parse(eingabe); if (zinsfuss < 0) { throw new FormatException("Negativer Zinsfuss!"); } } catch (IOException fehler) { Console.WriteLine("Eingabe-Fehler! " + fehler.Message); return false; } catch (FormatException fehler) { Console.WriteLine("Fehler! Message = " + fehler.Message); Console.WriteLine(fehler.StackTrace); return false; } return true; } // --------------------------------------------------------------------- /** <summary> Liest eine Zeile von der Tastatur. <p> Eingabe: alle Zeichen bis zur 'Return'- bzw. 'Enter'-Taste. </p> <p> Ende der Eingabe durch die Zeichenfolge "EOF" oder durch '^Z' (= 'Strg' + 'Z'). </p> </summary> <remarks> <ul> <li>'EndOfStreamException' tritt bei der Standardeingabe nicht ein!</li> <li>'^Z' = EOF-Kennung bei Konsoleneingabe, d.h.: EOF ist äquivalent zur Eingabe von '^Z'.</li> <li>Eingabe von '^Z' liefert 'null' für die Eingabe.</li> <li>EOF ist also gleichbedeutend mit 'null' für die Eingabe.</li> </ul> </remarks> <param name="eingabeaufforderung"> Eingabeaufforderung </param> <returns> true, wenn eine nichtnegative ganze Zahl gelesen wurde </returns> */ private String lesenEingabe(String eingabeaufforderung) { String eingabe; Console.WriteLine(eingabeaufforderung); eingabe = Console.ReadLine(); // EOF prüfen: if ( (eingabe == null) || (eingabe.Equals(EOF)) ) { eof = true; } return eingabe; } } }


Programmklasse ProgrammTryCatch
/* * ProgrammTryCatch.cs */ using System; using System.IO; namespace Beringer.oopBuch.EinAusgabe { /** <summary> Programmklasse (Applikation) zum Testen der Klasse 'TryCatchBsp'. <p> Seit: August 2007 </p> <seealso cref="TryCatchBsp" /> Autor: Beringer Alfred </summary> */ public class ProgrammTryCatch { /** -------------------------------------------------------------------- <summary> Der Einstiegspunkt für die Anwendung. </summary> <param name="args"> Kommandozeilenparameter </param> */ public static void Main(String[] args) { TryCatchBsp test = new TryCatchBsp(); test.Start(); } } }


Weiter
zu den C#-Klassenbeispielen von Kapitel 10 (Ein-/Ausgabe von Daten)
zu Kapitel 12 (PL/I)
zu Kapitel 13 (Reservierte Worte)
Zurück
zum Anfang dieses Kapitels
zum Inhaltsverzeichnis
 
zu Kapitel 1
zu den Klassenbeispielen von Kapitel 2
zur Parameterübergabe (Kapitel 2.7.1)
zu Kapitel 3
zu den Klassenbeispielen von Kapitel 4
zu den Java-Klassenbeispielen von Kapitel 5.19.1 (Exceptions)
zu den Java-Klassenbeispielen von Kapitel 6 (Ein-/Ausgabe von Daten)
zu den Java-Klassenbeispielen von Kapitel 7 (GUI)
zu Kapitel 8 (JDBC)
Zur
Java-Dokumentation der Java-Beispiele