Wie Erstellen von benutzerdefinierten Ausnahmen in Java

Sie können benutzerdefinierte Ausnahmen in Java erstellen. Als Programmierer, haben Sie wahrscheinlich ein gutes Verständnis auf Ausnahmen, aber hier werden Sie Vererbung Ausnahmen Ihrer eigenen zu erstellen.

Spuren der Throwable Hierarchie

Sie verwenden die try / catch-Anweisung Ausnahmen zu fangen und die werfen Anweisung Ausnahmen zu werfen. Jede Art von Ausnahme, die gefangen werden können oder geworfen wird durch eine andere Ausnahmeklasse vertreten. Was Sie nicht haben kann realisiert ist, dass diese Ausnahmeklassen eine ziemlich komplexe Vererbungskette verwenden.

bild0.jpg

Die folgenden Abschnitte beschreiben die Klassen in dieser Hierarchie:

  • Throwable: Die Wurzel der Ausnahmehierarchie ist die Throwable Klasse. Diese Klasse stellt alle Gegenstände, die mit einem geworfen werden kann werfen Aussage und mit einer gefangen Fang Klausel.

  • Fehler: Diese Unterklasse von Throwable stellt schwerwiegende Fehlerbedingungen, die vernünftige Programme nicht behoben werden kann. Die Unterklassen dieser Klasse stellen die spezifischen Arten von Fehlern, die auftreten können. Wenn die Java Virtual Machine aus dem Speicher ausgeführt wird, beispielsweise ein VirtualMachineError geworfen. Sie müssen sich keine Sorgen über diese Fehler in Ihren Programmen zu kontrollieren.

  • Ausnahme: Diese Unterklasse von Throwable stellt eine Fehlerbedingung, die die meisten Programme sollten versuchen, von zu erholen. So, Ausnahme ist effektiv die Spitze der Hierarchie für die Arten von Ausnahmen, die Sie mit zu fangen try / catch Aussagen.

    Mit Ausnahme (sorry) von Runtime, die Unterklassen von Ausnahme stellen bestimmte Arten von geprüften Ausnahmen, die gefangen oder geworfen werden müssen. Man beachte, dass einige dieser Subklassen Subklassen ihrer eigenen. Die Ausnahmeklasse mit dem Namen IOException, beispielsweise mehr als 25 Unterklassen verschiedene Arten von I / O Ausnahmen darstellen, die auftreten können.

  • Runtime: Diese Unterklasse von Ausnahme stellt nicht markiert Ausnahmen. Sie müssen nicht fangen oder unkontrollierte Ausnahmen werfen, aber Sie können, wenn Sie wollen. Subklassen von Runtime einschließen Null-Zeiger-Ausnahme und ArithmeticException.

Wenn Ihre Anwendung eine benutzerdefinierte Ausnahme auslösen muss, können Sie eine Ausnahmeklasse erstellen, die eine der Klassen in dieser Hierarchie erbt. Normalerweise jedoch, beginnen Sie mit der Ausnahme Klasse eine benutzerdefinierte geprüfte Ausnahme zu erstellen.

Erstellen einer Ausnahmeklasse

Um eine benutzerdefinierte Ausnahmeklasse erstellen, definieren Sie nur eine Klasse, die eine der Klassen in der Java-Ausnahmehierarchie erstreckt. Normalerweise Sie erweitern Ausnahme eine benutzerdefinierte geprüfte Ausnahme zu erstellen.

Angenommen, Sie haben eine Klasse sind zu entwickeln, die Produktdaten aus einer Datei oder Datenbank abruft, und Sie wollen Methoden, die I / O-Fehler auftreten, eher eine benutzerdefinierte Ausnahme zu werfen als die generische IOException das ist in der Java-API zur Verfügung gestellt. Sie können das tun, indem Sie eine Klasse erstellen, die sich Ausnahme Klasse:

public class ProductDataException extends Exception {}

Leider sind die Konstrukteure nicht als Klassenmitglieder betrachtet, so dass sie nicht geerbt, wenn Sie eine Klasse erweitern. Als Ergebnis der ProductDataException hat nur einen Standardkonstruktor. Das Ausnahme Klasse selbst und die meisten anderen Ausnahmeklassen haben einen Konstruktor, die Sie übergeben eine Zeichenfolge Nachricht können, die mit Ausnahme gespeichert ist und kann über die abgerufen werden getMessage Verfahren.

So wollen Sie diesen Konstruktor Ihrer Klasse hinzuzufügen, was bedeutet, dass Sie einen expliziten Standardkonstruktors zu hinzufügen möchten. So, jetzt die ProductDataException Klasse sieht wie folgt aus:

public class ProductDataException extends Exception {public ProductDataException {} public ProductDataException (String message) {super (Nachricht) -}}

Obwohl es möglich ist, dies zu tun, Hinzufügen von Feldern oder Methoden, um eine benutzerdefinierte Ausnahmeklasse ist ungewöhnlich.

Werfen Sie eine benutzerdefinierte Ausnahme

Wie für jede Ausnahme, verwenden Sie ein werfen Anweisung eine benutzerdefinierte Ausnahme zu werfen. Sie Code in der Regel diese werfen Anweisung in der Mitte einer Fang Klausel, die eine andere, allgemeinere Ausnahme abfängt. Hier ist eine Methode, die Produktdaten aus einer Datei abruft und wirft ein ProductDataException wenn ein IOException eintritt:

public class ProductDDB {public static Produkt getProduct (String-Code) wirft ProductDataException {try {Product p - // Code, der das Produkt aus einer Datei bekommt // und möglicherweise eine IOExceptionp = new Produkt () werfen - Rückkehr p} catch (IOException e) {throw new ProductDataException ( "Ein IO-Fehler aufgetreten ist.") -}}}

Hier ist ein Code, der die Anrufe getProduct Verfahren und fängt die Ausnahme:

try {Produkt p = ProductDB.getProduct (product) -} catch (ProductDataException e) {System.out.println (e.getMessage ()) -}

Hier wird die Nachricht einfach auf der Konsole angezeigt, wenn ein ProductDataException geworfen. In einem aktuellen Programm, möchten Sie den Fehler zu protokollieren, informieren den Benutzer, und herauszufinden, wie das Programm fortzusetzen anmutig, obwohl diese Daten Ausnahme aufgetreten ist.

Menü