Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java 7 Grundkurs

Verschiedene Probleme - verschiedene Exceptions

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
In der Java-Standard-Bibliothek finden Sie bereits eine Vielzahl von vordefinierten Exceptions. Lernen Sie sie kennen und anwenden, im Beispiel und in der Dokumentation.
06:36

Transkript

Das "Exception Handling" ermöglicht es uns, erwartete Probleme abzufangen und entsprechend zu behandeln. Das können Probleme sein wie: Eine Datei, die geöffnet werden sollte, konnte nicht gefunden werden, oder die Datenbankverbindung wurde plötzlich zurückgesetzt, oder, wie in diesem Beispiel hier, ein String konnte nicht in eine Zahl konvertiert werden. Alles Dinge, auf die unser Programm entsprechend reagieren können sollte, und zwar nicht mit einem vorzeitigen Abbruch. Wir schließen den Bereich, in dem die Exception auftreten könnte, in einen "Try"-Block ein, und direkt danach folgt das Schlüsselwort "Catch" und der Typ der Exception, die wir hier gern fangen möchten. Im darauffolgenden Codeblock können wir das Problem behandeln, und danach läuft das Programm wieder normal weiter. Die Exception, die hier entsteht, in der Methode "parseInt" in unserem Fall, zeigt lediglich an, dass ein Problem aufgetreten ist, und was für ein Problem es ist. Das Exception-Objekt selbst enthält keinerlei Code zur Fehlerbehebung oder Fehlerbehandlung. Diese Klasse hier heißt "NumberFormatException", das heißt, wir sehen, es ist wohl irgendein Problem mit einem Zahlenformat aufgetreten. Was das nun bedeutet, und wie das Problem zu behandeln ist, das liegt ganz im Ermessen des Entwicklers, der diesen Catch-Block implementiert. Damit ein Exception-Objekt allein durch seinen Typ anzeigen kann, was für eine Art von Problem aufgetreten ist, muss es natürlich für all die vielen verschiedenen Arten von Problemen auch entsprechend viele verschiedene Exceptions geben. Und die gibt es auch. In der Java Standard-Bibliothek sind für viele verschiedene Situationen und Probleme bereits die entsprechenden Exceptions vordefiniert. Exception-Typen werden als ganz normale Klassen deklariert. Sie enthalten nichts Besonderes; sie zeigen lediglich durch ihren Typ an, was für eine Art von Problem aufgetreten ist. Die Exception-Klassen in der Java-Standard-Bibliothek sind in eine große gemeinsame Klassenhierarchie eingebaut. Die Basisklasse heißt "Throwable", also werfbar. Sie beschreibt die Grundfunktionalität von allem, was geworfen werden kann. Also in unserem Fall eben Exceptions. Hier sehen wir diese Klasse in der Javadoc. Die wichtigste Methode in dieser Klasse ist wohl die Methode "getMessage", das ist diese hier, "getMessage". Mit dieser Methode haben wir die Möglichkeit, eine kurze textuelle Beschreibung des Fehlers aus dem Exception-Objekt herauszuholen. Das geht natürlich nur, wenn der Erzeuger dieser Exception auch eine Nachricht hineingepackt hat. Als Unterklasse von Throwable ist nun unsere Klasse Exception deklariert, die Basisklasse für alle Exceptions. Hiervon gibt es nun viele verschiedene Unterklassen, je nach Zweck. Zum Beispiel gibt es "IOExceptions"; die können z. B. auftreten, wenn ich mit Dateien arbeite. Es gibt "RuntimeExceptions", und es gibt "SQLExceptions", also offensichtlich Exceptions, die auftreten können, wenn ich mit einer Datenbank arbeite. Für viele dieser Typen gibt es weitere Unterklassen, die speziellere Fehler darstellen. Eine Unterklasse von "IOException" ist z. B. die "FileNotFoundException". Eine Unterklasse von "RuntimeException" ist die "NumberFormatException". Über diese Vererbungshierarchie sind die verschiedenen Problemarten also in Gruppen zusammengefasst. Dadurch kann ich Ausnahmen auch in Gruppen behandeln. Ich kann z. B. schreiben "catch (IOException)" und dadurch alles abfangen, was entweder I/O Exception oder eine der Unterklassen ist. Man sollte es mit der Verallgemeinerung allerdings nicht übertreiben. Je allgemeiner der Exception-Typ im Catch-Block, desto mehr verschiedene Exceptions können wir mit diesem Block fangen. Und desto weniger speziell kann unsere Fehlerbehandlung sein. Außerdem fangen wir möglicherweise Exceptions, mit denen wir nicht gerechnet haben, und deren Auftreten uns so verborgen bleibt. Nun kann es natürlich durchaus sein, dass in meinem Try-Block, in dem geschützten Bereich, mehrere verschiedene Exceptions auftreten. Um das zu simulieren, habe ich hier unten zwei weitere Methoden deklariert. Ich rücke die mal ein bisschen ran. Diese Methoden heißen: "Schreibe in Datei" und "Schreibe in Datenbank". Die Methode "Schreibe in Datei" wirft eine IOException und die Methode "Schreibe in Datenbank" eine "SQL Exception". Natürlich nicht unbedingt immer, aber sie könnte es tun, wenn etwas schiefgeht. Nun füge ich noch Aufrufe zu diesen beiden Methoden hier in meinen Try-Block ein. Nachdem die Zahl also erfolgreich aus dem String herausgeholt werden konnte und zur Summe addiert wurde, wird sie noch in eine Datei geschrieben, also Schreibe in Datei, die Zahl, Enter, und "Schreibe in Datenbank", Enter Enter. An den roten Kringellinien sehen wir schon, dass etwas nicht stimmt, denn die Exceptions, die hier entstehen könnten, fangen wir nirgendwo ab. Glücklicherweise sind wir hier nicht auf einen Catch beschränkt, sondern wir können mehrere Catch-Blöcke untereinander setzen. Ich könnte mir das hier auch generieren lassen, aber ich möchte es mal tippen, um es auch zu zeigen. Also ein weiteres "Catch", und dann können wir hier die I/OException fangen, und noch ein letztes "Catch" für die SQLException. Jetzt sind die roten Kringellinien weg. Auf diese Weise habe ich die Möglichkeit, jeden Fehler unterschiedlich zu behandeln. Manchmal möchte ich allerdings mehrere verschiedene Fehler auf dieselbe Weise behandeln. Hier könnte ich z. B. sowohl bei der I/OException als auch bei der SQL Exception einfach einen simplen Text ausgeben: "Fehler". Ich kopiere diese Zeile mit Strg+Shift+Pfeil runter, und dann verschiebe ich sie mit Alt+Shift+Pfeil runter. Jetzt nehmen wir diese Leerzeile noch raus. In einem solchen Fall habe ich die Möglichkeit, die beiden Catch-Blöcke zusammenzufassen zu einem sogenannten "Multi Catch", das heißt, ich zähle nach dem Catch einfach mehrere verschiedene Exception-Typen auf, getrennt durch einen senkrechten Strich. Noch "Speichern", dann verschwindet auch die rote Linie da unten. Das bedeutet jetzt also, fang eine "NumberFormatException" hier, wenn sie auftreten sollte, und mach diese Fehlerbehandlung, und fang "I/OException" und "SQLException" hier, wenn sie auftreten sollten, und mache diese Fehlerbehandlung. Kommen wir zum Abschluss nochmal kurz zurück zu unserer Grafik. Sie sehen hier, die Exceptions drängeln sich alle ziemlich auf die rechte Seite, also fehlt hier auf der linken Seite wahrscheinlich noch etwas. Genauso ist es auch. Es gibt noch eine zweite Unterklasse von Throwable, und die heißt Error. Exceptions sind erwartbare Abweichungen vom geplanten Programmverlauf, die wir gern behandeln möchten, und die wir dazu mit "Catch" abfangen. Ein Error hingegen ist in der Regel ein echter Fehler, ein richtiges Problem, das außerhalb unseres eigenen Programms liegt. Es kann zwar von unserem Programm verursacht worden sein, kann aber eher nicht von ihm behoben werden. Wir haben es hier mit Schwierigkeiten der VM selbst zu tun. Es gibt solche Errors wie "InternalError" oder "OutOfMemoryError". Wenn die Java-VM, die Ablaufumgebung unseres Programms, selbst nicht mehr genügend Speicher hat, dann wird unser Programm daran auch nichts mehr ändern können. Technisch gesehen ist es zwar möglich, solche Errors mit einem Catch-Block zu fangen, in der Anwendungsentwicklung wird allerdings davon abgeraten. Eine Regel lautet, dass eine Exception immer da gefangen werden sollte, wo man sie behandeln kann. Wenn die Java-VM einen "Internal Error" meldet, können wir den in unserer Anwendung sicher nicht beheben, sollten ihn also auch nicht fangen. Damit haben Sie gesehen, warum es so viele verschiedene Exception-Typen gibt, und wie Sie sie einzeln oder in Gruppen behandeln können. Eine vollständige Auflistung und Beschreibung aller in der Standard-Bibliothek vorkommenden Exception-Klassen finden Sie natürlich wieder in der Javadoc.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

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!