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.

Jetzt lerne ich Java 6

try-catch-Block

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Sie müssen Java eine Behandlung des Fehlers anbieten - am allerbesten gleich dort, wo der Fehler entstehen könnte. Das geschieht mit einem try-catch-Block, der den kritischen Code umschließt und alle oder bestimmte Exceptions abfängt.
09:54

Transkript

In der Einführung zu den Exceptions habe ich bereits ein bisschen darüber gesprochen, wie Exceptions innerhalb von Java gehändelt werden. Wir wollen uns das jetzt in diesem Film noch etwas näher anschauen und dann überlegen, wie wir eine solche Exception behandeln können, so dass unser Programm nicht einfach abstürzt. Nun. Wenn irgendeine Methode irgendetwas nicht tun kann, zum Beispiel, hier Methode innerhalb der Array-Klasse nicht einen Wert zuweisen kann - hier wird ja eine Zufallszahl generiert und hier wird dann irgendwann ein Index verwendet, der im Array überhaupt nicht vorhanden ist, weil wir ihn da einfach zu klein angelegt haben - dann wird in dieser Methode eine neue Instanz eines Exception-Objekts instanziiert. Und dieses wird dann sozusagen geworfen. Wenn in der Methode keine Fehlerbehandlung existiert, die dieses geworfene Exception-Objekt aufnimmt, so wird dieses Objekt weitergegeben an die aufrufende Methode. Und das wäre hier unser Hauptprogramm. Und wenn diese Methode das Ganze nicht aufhängt oder bearbeitet, dann wird es wieder weitergegeben und irgendwann ja beendet das Ganze eben mit einem lauten Knall. Nun an dieser Stelle können wir einhaken. Da ja diese Exception immer wieder weiter geworfen wird, können wir einen Catcher einbauen. Das heißt, wir können dann an irgendeiner Stelle innerhalb der Methoden, auf die wir halt Zugriff haben, einen Catcher einbauen und sagen: okay, wenn da ein Exception-Objekt ankommt, dann fangen wir das auf und behandeln das. Und daher steht an vielen Methoden auch in der Dokumentation, dass diese eine Exception werfen können und auch welche Exception diese werfen können, dass wir im Notfall darauf reagieren können. Nun schauen wir uns das jetzt aber noch mal ganz praktisch an. Wenn ich das hier jetzt kompiliere, bekomme ich eine Exception, und zwar eine "ArrayIndexOutOfBoundsException" Und die steht im Paket "java.lang" Es wäre doch eine gute Idee, sich das einfach mal anzuschauen. Daher kopiere ich mir das kurz hier rüber, füg' es hier ein. Markiere das Ganze und lass es mir mal in… lass mir das Ganze mal kurz im Browser anzeigen. Und wir sehen also, woher das Ganze stammt. Es stammt eigentlich von der Klasse "Throwable". Und dann gibt es eine allgemeine Exception. Und dann gibt es "RuntimeException" und hier liegt also unsere "IndexOutOfBoundsException" Wenn wir uns die mal anschauen - und hier ein bisschen runterscrollen - sehen wir, dass es einige Methoden gibt, die geerbt werden, und zwar von "Throwable". Und da gehen wir jetzt einfach mal hinein nach "Throwable". Und wenn wir jetzt hier mal durchscrollen, sehen wir, dass wir hier eine große Anzahl an Methoden haben, die so eine Exception haben kann. Und wie so eine Exception nun geworfen wird und wie wir sie auffangen, schauen wir uns jetzt an. Das heißt, mit diesem Wissen - löschen wir das Ganze hier wieder - werden wir nun um diese Schleife, die den Fehler auslösen kann, einen try-Block setzen. Das bedeutet, wenn wir bei einer Funktionalität davon ausgehen können, dass dort eine Exception auftritt, dann legen wir das in ein try-Block. Und ein try-Block verlangt von uns, dass wir irgendwo einen Catcher haben. Und den schreiben wir direkt danach. Die Syntax sieht so aus: wir schreiben "try" dann geschweifte Klammern, da rein kommt eben das Codestück, wo die Exception auftreten kann, direkt danach "catch", und dann kommt in runden Klammern ein Parameter. Und zwar der Parameter, der das Exception-Objekt aufnimmt. Wir haben hier jetzt gesehen, das kommt vom "Throwable". Aber wir sagen einfach, wir wollen ein Exception-Objekt hier anlegen: Exception e Und wenn jetzt also ein Exception-Objekt ankommt, dann wird es hier in diese Instanz "e" Exception aufgefangen, und dann können wir das hier in dem darauf folgenden Code-Block auch verwenden. Und die Methoden, die wir vom "Throwable" gesehen haben - Code "e" jetzt natürlich geerbt - und die können wir jetzt einfach auslesen. Das erste, was wir jetzt hier doch machen bei Try and Catch, ist in System.out mal eine eigene Fehlermeldung ausgeben. "Hups!" Ohne dass wir jetzt was mit der Exception machen. Geben nur ein "Hups!" aus. Wenn ich das jetzt laufen lasse, und hier unten - das sollten wir kurz auskommentieren, sonst haben wir direkt den nächsten Fehler dort unten - dann sehen wir, dass wir überhaupt keine andere Fehlermeldung mehr bekommen. Jetzt ist Java zufrieden. Denn der Fehler wurde aufgefangen von uns. Hier im catch-Block. Und wir haben ihn quittiert und unser Programm läuft ganz normal weiter. Das Programm ist also an dieser Stelle nicht abgestürzt. Jetzt ist es aber natürlich eine schlechte Idee zu sagen: oh, das ist ja eine wunderbare Lösung, häng' dein gesamtes Programm in den try, catch das Ding, mach' geile Ausgabe und schon sind alle Programm problemlos. Nein-nein, das Programm kriecht ja schon ab. Nur wir landen eben in einer von uns definierten Methode. Jetzt schauen wir uns an, was ist denn in "e" alles drin. Nun, wenn wir jetzt "e" eingeben und den Punkt, dann sehen wir die eben gesehenen Methoden. Und hier gibt es, zum Beispiel, eine, die heißt "getMassage". Wählen wir diese mal aus, und lassen die auch dann noch entsprechend ausgeben mit System.out PrintLine. Schreiben wir einfach mal "Error-Massage" davor. Dann wissen wir auch, was wir dann grade ausgeben. Und kompilieren das nun mal. Okay, Sie sehen jetzt, wir haben eine Error-Massage und hier steht eben eine Nummer zur Zeit. Error-Massage 5, gut. Kann ich im Moment noch nicht so richtig viel damit anfangen, daher wollen wir noch ein bisschen mehr wissen. Haben wir noch ein paar Methoden. Und zwar, wir können den "Stack" ausgeben: e.printStackTrace Und hier müssen wir jetzt aufpassen, das Ganze gibt nix zurück. Das heißt, es kommt hier nicht in ein System.out, sondern das steht für sich. Auch gut. Lassen wir es mal ablaufen. Und wir sehen jetzt hier also auch eine Klasse Fehlermeldung. Sie haben also jetzt gesehen, wir können auf diesen Fehler reagieren und diesen Fehler auffangen. Jetzt haben wir es jedoch noch relativ allgemein an dieser Stelle. Wir haben gesagt - eine Exception. Und wenn ich jetzt zum Beispiel mal hingehe, und hier unten, das Ganze wieder auskommentiere und diesen Block hier einfach auch noch hier oben reinschiebe, in mein try-Block, das hier auskommentiere. Das bedeutet, wir bekommen jetzt eigentlich einen ganz anderen Fehler. Jetzt haben wir nämlich eine Division durch 0, anstatt hier eine IndextOutOfBounds Dann kommt leider die gleiche Fehlermeldung: Hups! Und das ist natürlich nichts in der Sache. Und worum wir uns jetzt kümmern werden, ist - wir können natürlich auch mehrere catch-Blöcke definieren. Oder wir können hier sogar sagen: eigentlich wollen wir hier eine andere Fehlermeldung haben. Also, gehen wir hin, kopieren uns hier dieses Objekt und sagen: in Wirklichkeit interessiert uns lediglich eine "ArithmeticException". Lassen wir das Ganze durchlaufen. Es kommt noch … also… und jetzt … nehmen wir da oben das mal weg. Und hier das kommentieren wir aus und lassen es laufen. Und wir bekommen nicht unsere Fehlermeldung. Denn jetzt haben wir eine ganz andere Exception ausgelöst und dieser catch-Block fängt diese nicht auf. Und jetzt ist natürlich klar, worauf wir hinaus wollen. Wir haben auch die Möglichkeit mehrere catch-Blöcke zu definieren. Das heißt, wir können uns diesen ganzen catch-Block hier einfach kopieren, können hier setzen, und sagen: okay, es gibt ja auch noch andere schöne Exceptions, die wir abfangen könnten. Und zwar, eine ArrayIndexOutOfBoundsException. Die fangen wir hier auf. Hier lassen wir ausgeben: "Hups! das Array ist zu klein" Und hier lassen wir ausgeben: "Durch Null ist doof!" Also. Zwei catch-Blöcke. Nun haben wir das jetzt ausführen lassen. Hier bekommen wir jetzt "das Array ist zu klein" Jetzt kommentieren wir im Moment das mal kurz aus. Holen hier den Kommentar weg, jetzt mal meine Division durch 0. Und: "Durch Null ist doof!" So haben Sie also auch die Möglichkeit, mehrere catch-Blöcke hinter ein try zu hängen, um darauf zu reagieren.

Jetzt lerne ich Java 6

Steigen Sie ein in die Programmierung mit Java 6, lernen Sie die Grundlagen kennen und unternehmen Sie anschließend Ihre ersten Schritte in der objektorientierten Programmierung.

12 Std. 27 min (98 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!