Jetzt lerne ich Java 6

Eigene Exceptions

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Da Exceptions in Java auch 'nur' Klassen sind, kann man durchaus auch eigene Objekte ableiten und die gewünschte Reaktion durch ein Überladen von Methoden herbeiführen. Klingt umständlich, ist es aber nicht ...
12:00

Transkript

Zum Abschluß unserer Filme über die Exceptions habe ich Ihnen versprochen, dass ich Ihnen zeigen werde, wie man eigene Exceptions schreiben kann. Dazu habe ich mir ein nettes kleines Beispiel ausgedacht. Stellen wir uns vor, Sie wollen auch eine Klasse schreiben, die statische Methoden zur Verfügung stellt. Diese Klasse, die wir entwickeln wollen, nennt sich Spielen, und diese Klasse bietet Ihnen eine statische Methode, die eben zum Spielen geeignet ist. Wir geben dieser Spielen-Klasse dann immer einen Auftrag, z.B. ich mag mit die Autos spielen, ich mag mit dir Schiffe versenken oder sonst was, und alles wird quittiert – ich mag Autos spielen, Schiffe versenken und ähnliches. Also eine ganz nette Klasse. Bis auf eine Sache. Diese Klasse Spielen mag definitiv kein Singen. Also wenn der Auftrag singen auf diese Klasse gegeben wird, soll diese augenblicklich eine Exception auslösen. So zu sagen einen Fehler, aber nicht irgendeinen, es passt ja schlecht eine mathematische Exception oder sonst was. Wir wollen eine Singen-Exception auslösen. Und das wollen wir jetzt noch lösen. Sie können sich mit Sicherheit vorstellen, dass wir damit die Umgebung von Java wirklich aufräumen werden, werden wir es endlich schaffen, eine singende Exception auszulösen. Also, los geht’s! Das erste, was wir innerhalb unseres Projektes brauchen sind zwei weitere Klassen. Einmal brauchen wir eine Singen-Exception, die gibt es definitiv in den Paketen von Java noch nicht, jedenfalls habe ich sie noch nicht gefunden. Und einmal brauchen wir unsere Spielen-Klasse. Beginnen wir doch einfach mal mit der Spielen-Klasse, damit zuerst einmal klar wird, was wir mit dieser Spielen-Klasse überhaupt meinen. Dazu lege ich mir eine neue Klasse an. Eine Java Klasse, die nenne ich einfach Spielen. Sie muss im gleichen Paket liegen, das passt hier, und ich sage Ok, das ist meine Klasse. Den Konstruktor lasse ich einfach links liegen, da wir eine statische Methode haben wollen zum Spielen, daher fangen wir hier an. Sie soll public sein, damit ich das nutzen kann. Sie soll static sein, damit wir diese Klasse Spielen instanzieren müssen. Sie wird nicht zurückgeben, sondern sie macht direkt selber eine Ausgabe, also void, und das Ganze heißt dann Spielen. Das Einzige was wir dann übergeben an diese Methode ist ein String mit dem Auftrag, was wir also Spielen wollen. Hier setzen wir geschweiften Klammern, und jetzt ist die Sache eigentlich so…, ich mag alles außer Spielen. Das müssen wir so abbilden, d.h. wir sagen wenn der Auftrag, und der Auftrag ist ein String. Ich vergleiche jetzt mit Wort Singen, aber wir dürfen nicht den Vergleichseparator nehmen, also das hier dürfen wir nicht, denn wir haben hier auf dieser Seite einen String und wir haben gelernt, dass man Strings mit ihrer Methode Equals vergleicht. Also equals(„Singen“). Das kann natürlich sein, dass es kleingeschrieben ist, das wollen wir auch abdecken. Dann „Ich hasse singen“. Hier müssen wir darum kümmern, dass hier an dieser Stelle gleich eine Exception geworfen wird. Ansonsten (else) ist unsere Klasse wunderbar zufrieden und gibt einfach auf der Konsole eine passende Meldung aus „Ich mag“ +Auftrag. Damit soll Spielen erst einmal fertig sein. Ich speichere das mal kurz. Jetzt nutzen wir das, direkt schon mal hier in der Main, in dem wir hier einfach mal sagen, wir nehmen Spielen und da wir eine Statik-Methode haben, können wir direkt auf Spielen zugreifen, also auf die Klasse und brauchen keine Instanz, wir wählen hier jetzt Spielen aus. Wir sehen, wir müssen einen Auftrag übergeben und sagen mal „Auto fahren“ und danach spielen wir noch ein Bisschen, Spielen spielen und „Tennis spielen“. Testen wir erstmals damit. Wir werden jetzt das Ganze kompilieren. Sie sehen, es werden zwei Source-files kompiliert, und ja, unsere Klasse mag Autofahren und mag auch Tennis spielen. D.h. so weit Ok. Unsere Spielen Klasse funktioniert, wir müssen uns nur darum kümmern, was passiert, wenn es hier Singen angegeben wird. Jetzt testen wir mal, ob unsere if-Abfrage geht. Ich nenne das mal „nicht singen!“. Wir lassen das Ganze kompilieren, läuft immer noch, sehr schön. Und jetzt geben wir ja den Auftrag, das die Klasse singen soll. Und wie erwartet, wir bekommen eine Ausgabe „nicht singen!“. Aber wir wollen das mit einer Exception, also mit einer Ausnahme quittieren. Und dafür müssen wir an dieser Stelle eine Exception werfen. Aber wir wollen eine eigene Exception werfen. Und die müssen wir zunächst erstellen. Exceptions sind Objekte, abgeleitet von einer entsprechenden Exception-Klasse. Und die können wir natürlich jedenfalls ableiten. Wir erben einfach von Exception und überschreiben die Methoden, die wir haben wollen. Also wir legen uns eine neue Klasse an, New File, hier in der Umgebung wir haben hier direkt eine Java Exception, das einzige was aber hier dises File, also diese Vorlage macht, ist nichts anderes, als dass sie automatisch Exception erweitert. Und das wir schon einen passenden Konstruktor bekommen, das sind also Dinge, die man in einer anderen Umgebung selbst schreiben kann, aber hier ist es natürlich sehr gemütlich. Die Exception nennen wir jetzt „SingenException“. Sie liegt im passenden Package und damit haben wir unsere SingenException. Sie sehen jetzt hier sehr schön, wie eine eigene Exception gemacht wird. Wir leiten ab, wir extenden java.lang.exception. Damit erbt unsere SingenExcepiton alles, was eine normale Exception kann. Wir haben hier einen Standard-Constructor, unten drunter haben wir einen, der ein String übergibt und der ruft eben dann mit super entsprechend den Constructor der originalen Exception auf. Da müssen wir also nichts tun. Sie können jetzt natürlich hier Ihre Überschreibungen hinein bringen und jetzt eben eine spezielle Art, wie diese Exception instanziert wird, anlegen. In unserem File benügen wir damit, dass wir eine Fehlermeldung generieren. Eine Fehlermeldung wird generiert oder wird ausgegeben über getMessage. Das können wir uns im Browser anschauen. Dafür wähle ich hier oben einfach mal die java.lang.Exception aus, rechte Maustaste, Show Javadoc. Dann öffnet sich hier mein Browser, und ich bekomme die Beschreibung der Klasse Exception, dann wähle ich hier oben – Zeige mir alle Methoden. Selber haben wir nicht viele Methoden, sondern die meisten sind hier von Throwable geerbt, und hier ist unsere getMessage. Dann klicken wir mal drauf und dann haben wir auch die Signatur dieser Methode. Also sie ist public, sie liefert ein String zurück, nimmt kein Parameter an und heißt getMessage. Wir können sogar diese Signatur hier einfach in die Zwischenablage kopieren. Und hier an unsere Klasse SingenException einfach ins Ende der Datei dann einfügen. Dann machen wir da auch keinen Fehler. Gut, und die implementieren wir jetzt. Damit überschreiben wir die original getMessage von Exception. Was wollen wir tun? Wir lassen jetzt einfach nur eine Fehlermeldung ausgeben. Sie können hier natürlich alles Mögliche ausgeben lassen, wir lassen es dabei: „Ich mag kein Singen!“. Und damit haben wir eine eigene Exception geschrieben. Wir haben hier noch kleinen Fehler drin, wir sehen, wir müssen das nicht ausgeben, sondern wir Müssen das zurückgeben. Gehen wir hin, return, „Ich mag kein Singen“, die Klammer noch weg und dann sind wir hier korrekt. Und damit können wir diese Exception-Klasse schon beenden für uns. Und jetzt gehen wir zurück in unsere Spielen-Klasse. Diese Spielen-Klasse soll ja eine eigene Exception werfen. Statt hier „nicht singen“ zu sagen. Daher gehen wir jetzt hin und instanzieren jetzt hier eine neue Instanz von SingenException. Also „throw new SingenException“. Jetzt sollten wir gleich einen Fehler bekommen. Genau, gehen wir mal drüber. Jetzt sagt uns nämlich das Programm: „Hör mal zu, hier wirfst du eine Exception, aber irgendwo muss Sie aufgefangen werden oder du musst deklarieren, dass sie geworfen wird“. Also wir wollen sie nicht in der Klasse Spielen auffangen, es könnten wir natürlich auch machen, in unserem Fall wollen wir es nach Außen leiten, sollen sich die jenigen, die Spielen-Klasse so mißbraucht haben, einfach selber darum kümmern. Und daher gehe ich jetzt in diese Methode hier „spielen“, setze mich einfach dahinter und sage: diese Methode wirft im schlimmsten Falle eine SingenException. Und damit verschwindet hier auch dieser Fehler. Dann können wir ja auch diese Datei speichern, und zurück zu Main. Bis zu diesem Punkt sind wir jetzt gekommen, und plötzlich ist unser Code an dieser Stelle falsch. Ist nicht wirklich Falsch, sondern wen wir darüber gehen heißt es: höre mal zu, spielen kann eine Exception auslösen, das wissen wir schon, das haben wir gerade selber eingestellt in spielen. Du musst es abfangen, wir können hier noch außen rum ein Try und Catch Block setzen, oder du musst das weiterleiten. Das tun wir, wir sagen der Main – da kann eine Exception geworfen werden, wir könnten jetzt ganz allgemein throws Exception schreiben, das würde funktionieren. Dann würden vielleicht andere Exceptions, die ausgelösst werden, die überhaupt mit unserem Singen nichts zu tun haben, dann auch mit natürlich nach außen geleitet werden. Man sollte wirklich nur die Exceptions behandeln, die man haben will. Aber im unseren Fall, lassen wir es zunächst mal gut sein, wir kompilieren uns das Ganze und schauen uns das jetzt mal an. Das Ganze wurde kompiliert, er mag Auto fahren, er mag Tennis spielen, und plötzlich haben wir eine Exception in thread main de.ipartner.java.eigeneexceptions.Singen Exception haben wir ausgelöst. Aha, wir haben jetzt völlig eine neue Exception innerhalb unserer Java-Umgebung, und sie hat sogar eine Fehlermeldung – Ich mag kein Singen! Ich gehe davon aus, dass Sie es, wenn Sie sich das noch mal anschauen, nachvollziehen können, und damit Sind Sie jetzt in der Lage eigene Exceptions zu schreiben. Und ich wünsche Ihnen viel Spaß mit eigenen Exceptions.

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!