Welche Möglichkeit zur Anpassung der Ausnahmebehandlung war aus 8.2 bereits bekannt?
Das Werfen einer Standard-Exception mit einer eigenen (angepassten) Fehlermeldung.
Warum reicht das Werfen einer angepassten Standard-Exception manchmal nicht aus?
Weil nicht immer eine passende Standard-Exception in Java existiert, die den konkreten fachlichen Sachverhalt abbildet.
Was ermöglichen eigene (selbst definierte) Exceptions?
Noch individuellere Ausnahmen zu erzeugen und abzufangen, die programmspezifische Sachverhalte abbilden, welche keine Standard-Exception abdeckt.
Von welcher Klasse muss jede Ausnahme – egal ob Standard-Exception oder eigene Exception – erben?
Von der Oberklasse Exception.
Exception
Was kann mithilfe der Konstruktoren einer eigenen Exception festgelegt werden?
Welche Nachrichten von der Exception erzeugt werden.
Was sollte festgelegt werden, wenn zur Erzeugung der Standard-Konstruktor einer eigenen Exception verwendet wird?
Eine Standard-Fehlermeldung.
Wie wird die Standard-Fehlermeldung technisch in der eigenen Exception-Klasse festgelegt?
Indem im Standard-Konstruktor der eigenen Exception der Konstruktor der Oberklasse Exception mit der gewünschten Zeichenkette als Parameter aufgerufen wird.
Was macht der Exception-Konstruktor mit dem übergebenen Zeichenketten-Parameter, und wie wird er dem aufrufenden Programm zur Verfügung gestellt?
Er interpretiert den Parameter als Fehlermeldung und stellt sie über die Methode getMessage() dem aufrufenden Programm zur Verfügung
getMessage()
Wie kann eine eigene Exception mit einer erst zur Laufzeit bekannten (individuellen) Fehlermeldung erzeugt werden?
Durch einen zusätzlichen, überladenen Konstruktor mit Parameter, der die übergebene Fehlermeldung unmittelbar an den Konstruktor der Oberklasse Exception weiterreicht.
Warum ist es sinnvoll, für getMindestbestellwert() eine ganz neue Exception-Klasse zu definieren, statt einfach eine bestehende Standard-Exception wie ArithmeticException mit angepasster Meldung zu werfen?
getMindestbestellwert()
ArithmeticException
ArithmeticException signalisiert fachlich ein arithmetisches Problem (z. B. Division durch Null) – ein negativer Mindestbestellwert ist aber kein arithmetischer Fehler, sondern ein fachlicher Regelverstoß (ein unzulässiger Wert). Eine eigene Exception-Klasse wie MindestbestellwertNegativException macht den Fehlertyp im Code selbst benennbar und eindeutig erkennbar, statt eine inhaltlich unpassende Standard-Exception "zweckzuentfremden".
MindestbestellwertNegativException
Warum müssen auch selbst definierte Exceptions zwingend von Exception erben, statt eine komplett neue, unabhängige Klasse zu sein?
Nur wenn eine Klasse von Exception erbt, wird sie vom Java-Sprachmechanismus überhaupt als Ausnahme erkannt und kann mit throw geworfen sowie in einem catch-Block (z. B. für Exception oder eine spezifischere Oberklasse) abgefangen werden. Außerdem erbt sie dadurch nützliche geerbte Funktionalität wie getMessage().
throw
catch
Warum ist es sinnvoll, sowohl einen parameterlosen Standard-Konstruktor mit fester Meldung als auch einen überladenen Konstruktor mit individueller Meldung für eine eigene Exception anzubieten?
Manchmal reicht eine allgemeine, immer gleiche Fehlermeldung aus (Standard-Konstruktor); in anderen Fällen soll die Meldung erst zur Laufzeit mit konkreten, situationsabhängigen Details gefüllt werden (überladener Konstruktor mit Parameter). Beide Varianten zusammen bieten maximale Flexibilität – ähnlich wie beim Überladen normaler Konstruktoren (siehe 7.2).
Erkläre am Beispiel von getMindestbestellwert() und getKundendaten() den kompletten Ablauf einer eigenen Exception – von der Definition über das Werfen bis zum Abfangen.
getKundendaten()
Da ein negativer Mindestbestellwert kein von Standard-Exceptions abgedeckter Sachverhalt ist, wird die eigene Klasse MindestbestellwertNegativException definiert, die von Exception erbt und im Standard-Konstruktor eine feste Fehlermeldung an den Exception-Konstruktor übergibt. Die Methode getMindestbestellwert() wirft nun bei einem negativen Wert statt eines Fehlersignals diese MindestbestellwertNegativException. Im aufrufenden Programm, der Methode getKundendaten(), muss der Rückgabewert nicht mehr auf ein Fehlersignal überprüft werden – stattdessen wird der Aufruf von getMindestbestellwert() in einen try/catch-Block eingebettet, und im Ausnahmefall wird die zugehörige Fehlermeldung über getMessage() auf der Konsole ausgegeben.
Erklären Sie, wie eigene Exceptions in Java definiert und eingesetzt werden, und wann dies gegenüber Standard-Exceptions sinnvoll ist.
Eigene Exceptions kommen zum Einsatz, wenn kein passender Standard-Exception-Typ existiert, um einen bestimmten, programmspezifischen Fehlerfall fachlich korrekt abzubilden (z. B. ein negativer Mindestbestellwert, für den keine arithmetische oder sonstige Standard-Exception passt). Wie jede Exception muss auch eine eigene Exception-Klasse von der Oberklasse Exception erben. Über die Konstruktoren wird festgelegt, welche Nachricht die Exception liefert: Im Standard-Konstruktor wird eine feste Standard-Fehlermeldung an den Konstruktor der Oberklasse Exception übergeben, die anschließend über getMessage() abrufbar ist. Für individuelle, erst zur Laufzeit bekannte Meldungen kann zusätzlich ein überladener Konstruktor mit Parameter definiert werden, der die Meldung direkt an den Oberklassen-Konstruktor weiterreicht. Im Einsatz wird die eigene Exception genau wie eine Standard-Exception mit throw geworfen und vom aufrufenden Programm in einem try/catch-Block abgefangen, wodurch das lästige Durchsuchen von Rückgabewerten nach Fehlersignalen entfällt.
Zuletzt geändertvor 4 Stunden