Visual C# 2011 Grundkurs

Exceptions

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Wenn man im Programmverlauf eine nicht erlaubte Operation durchführt, werden so genannte Exceptions, Ausnahmen, ausgelöst. Diese müssen behandelt werden, damit es nicht zum Programmabsturz kommt.
05:42

Transkript

Wir schauen uns jetzt mal an, was man tun kann, wenn man im .NET Framework, oder in anderen Programmteilen irgendwelche nicht zugelassenen Dinge macht und daraufhin ein Fehler ausgelöst wird. Ich habe hier mal ein Array deklariert, dieses Array ist vom Datentyp "Int", heißt "Number" und hat genau drei Elemente. Ein beliebter Fehler, den sowohl Anfänger als auch Profis gerne machen, oder auch häufig machen, ist das man diese Indexe von diesen Arrays falsch einschätzt. Man denkt z.B., man könnte hier mit "Console.WriteLine" das - ja, nehmen wir mal das dritte Element von diesem Array - ausgeben, aber dieses Array hat natürlich gar kein Index "3", sondern der höchste Index ist die "2". Trotzdem macht man das sehr oft. Wenn ich so etwas mit meinem Code machen würde und würde diesen Code ausführen, dann würde es an dieser Stelle einen Fehler geben, eine sogenannte Exception oder Ausnahme. Diese Exception wird ausgewählt von dem Framework, weil das Framework kontrolliert, was ich im Hintergrund mache, was mein Programm macht und wenn etwas - ja sagen wir mal nicht Legales passiert - dann löst es diese Exceptions aus. Die kann ich auch selber auslösen, aber das ist eben eine Framework Exception. Wenn ich diese Framework Exception jetzt nicht behandeln würde, dann würde mein Programm einfach abstützen, d.h., wenn Sie ein Programm zu einem Freund oder einem Kunden schicken und dort zu eine Ausnahme ausgelöst wird und Sie nichts dagegen unternehmen, dann stürzt das Programm einfach ab. Der Kunde klickt auf den Button, das Programm ist weg. Das behandeln von diesen Ausnahmen ist eigentlich ganz einfach. Mit dem Schlüsselwort "Try" sage ich an dieser Stelle: "Probiere einfach mal, ob du diese nachfolgende Zeile oder den nachfolgenden Codeblock ausführen kannst und wenn nicht, dann springe aus diesem Block raus. Dann springe bitte hier in diesen Catch Block rein." Das heißt, wenn so eine Ausnahme ausgelöst wurde, springe in den Catch Block rein. Geben wir mal aus, Ausnahme ausgelöst. Wenn ich das jetzt hier nochmal laufen lasse, dann passiert diese Exception wieder, die Ausnahme wird aber ausgelöst, das Programm läuft weiter. Das heißt, wir haben diese Ausnahme abgefangen, in diesem Catch Block nennt man das, man hat diese Ausnahme behandelt, und dann läuft das Programm normal weiter. Natürlich wurde oben das Array.Element nicht ausgegeben, das ist ja nach wie vor nicht vorhanden. Damit haben wir diese Ausnahme abgefangen. Jetzt kann es aber sein, dass wir diese Ausnahme zum einen behandeln möchten, dass wir danach irgend eine Aktion durchführen möchten, z.B. eine geöffnete Datei wieder schließen, oder eine geöffnete Datenbankverbindung schließen und dann wollen, dass diese Ausnahme weitergeschmissen wird. Weitergeschmissen heißt, wenn ich eine Methode aufrufe und in dieser Methode eine Ausnahme ausgelöst wird, dann wird sie, wenn sie dort nicht behandelt wird, automatisch in die aufrufende Methode weitergereicht, d.h. dann würde jetzt, wenn ich das in Main, eine Methode aufrufen würde, in der die Exception ausgelöst wird, würde diese Exception an Main weitergeleitet und  dann dort ausgelöst und könnte jetzt dort behandelt werden. Wenn ich jetzt eine eigene Methode geschrieben hätte und hätte jetzt hier diese Datei geschlossen und wollte, dass diese Ausnahme danach weiter nach oben gereicht würde, würde ich hier einfach hinschreiben "Throw". Das weist also den Compiler an, nachdem diese Ausnahme abgefangen und behandelt wurde, diese Ausnahme nochmal zu schmeißen und dann mehr oder weniger in dieser Aufrufreihenfolge der Methoden weiter nach oben zu reichen, dass die darüberliegende Methode diese Ausnahme eventuell behandeln könnte. Nun kommt man manchmal in die Situation, z.B. wenn ich aus einer Datei lese, dass ich in diesem Try Block sage: "Versuche, aus der Datei zu lesen, und wenn es eine Exception gibt, springe in den Catch Block." und dort behandle ich diese Ausnahme. jetzt muss ich aber, wenn ich eine Datei lese, muss ich die irgendwann auch wieder schließen, weil solange diese Datei geöffnet ist, kann kein anderer Prozess auf diese Datei zugreifen. Das heißt, im schlimmsten Fall, wenn ich diese Datei nicht schließe, kann gar kein Programm mehr auf diese Datei zugreifen. Aber diese Datei muss zum einen geschlossen werden, wenn ein Fehler auftritt, aber auch, wenn der Inhalt erfolgreich gelesen werden konnte, und in solchen Situationen, wo man bestimmten Codebereich ausführen muss, wenn es erfolgreich war und wenn ein Fehler aufgetreten ist, gibt es den Finally Block. In Finally kann ich also jetzt alles das machen, was ich normalerweise nach erfolgreichem Ablauf des Programms machen müsste und was ich auch machen müsste, wenn ein Fehler aufgetreten ist. Wir nehmen wieder "Console.WriteLine" und schreiben mal: "Finally". Wenn ich das Ganze hier oben in der Console noch einmal ausführe, sieht man, die Ausnahme wurde aufgelöst und hier wurde die Exception jetzt nochmal geschmissen, d.h., wir haben die Ausnahme nicht behandelt, wir wollten sie jetzt dann in die aufrufende Methode weitergeben. Das war jetzt an der Stelle natürlich nicht gewollt, ich kompiliere das nochmal, und man sieht jetzt hier, die Ausnahme wurde hier ausgelöst, danach ist er in den Catch Block gesprungen, hat hier "die Ausnahme ausgelöst" ausgegeben und danach in den Finally Block gesprungen, wo er nochmal "Finally" ausgegeben hat. Wenn ich jetzt hier hinein gehe und den Index auf "2" ändere. Also der Index "2" ist natürlich hier oben vorhanden, das wäre die Zahl "3". Dann wird jetzt keine Ausnahme ausgelöst und wenn ich dann das Ganze ausführe, sehe ich zunächst, wird die "3" ausgegeben hier aus dem Try Block und dann das, was in Finally steht und dann wird auch das ausgeführt.  Wir haben in diesem Video gesehen, dass wenn in der .NET Framework ein Fehler passiert, dann wird die sogenannte Exception ausgelöst. Diese Exception muss ich in irgendeiner Art und Weise behandeln und wenn ich diese Exception nicht behandle, dann kann es zum Programmabsturz führen. Behandeln kann ich das Ganze, indem ich den Bereich, der kritisch ist, der so eine Exception auslösen kann, in so einen Try Block verpacke, und dann heißt es eben halt für den Compiler bzw. für das Programm, was ausgeführt wird: "Versuche einfach mal, das auszuführen und wenn es nicht klappt, dann spring in den Catch Block." Der Catch Block steht direkt nach dem Try Block, dort kann ich jetzt irgend welche Maßnahmen ergreifen, um diesen Fehler zu behandeln. Wenn ich bestimmte Aktionen ausführen muss, die sowohl nach einem Fehler gemacht werden müssen, als auch nach dem erfolgreichen Abarbeiten dieses Anweisungsblockes bei Try, kann ich einen Finally Block benutzen. Im Finally Block kann ich dann solche Dinge machen, wie z.B. das Schließen einer Datei.

Visual C# 2011 Grundkurs

Steigen Sie in die C#-Programmierung ein und lernen Sie sowohl die Grundlagen der Sprache C# als auch die Entwicklungsumgebung Visual Studio 2010 und .NET-Framework kennen.

7 Std. 28 min (81 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Software:
Visual Studio Visual Studio 2010
Exklusiv für Abo-Kunden
Erscheinungsdatum:27.06.2011

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!