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)
- zu Kapitel 12 (PL/I)
- 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)
- zum Inhaltsverzeichnis
- Zur
- Java-Dokumentation der Java-Beispiele