[FIXED] Wie identifiziert man geprüfte und ungeprüfte Ausnahmen in Java?

Ausgabe

Beim Lesen über Ausnahmen werde ich immer auf geprüfte Ausnahmen und ungeprüfte Ausnahmen stoßen. Wollten Sie also wissen, wie man unterscheidet, was was ist?

Bearbeiten: Ich möchte wissen, ob ich eine Ausnahmeklasse erstelle, wie kann ich dann als aktiviert oder als deaktiviert erstellen?

und was ist die Bedeutung von jedem?

Lösung

Alle Throwables außer Unterklassen von java.lang.RuntimeExceptionoder java.lang.Errorwerden geprüft. Genau genommen sind in Java “Ausnahmen” Unterklassen von java.lang.Exception, “Fehler” sind Unterklassen von java.lang.Errorund java.lang.Throwablewerden normalerweise nicht direkt als Unterklassen bezeichnet.

Programme sollen keine eigenen ErrorUnterklassen erstellen (obwohl die Dokumentation dazu ziemlich zweideutig ist), also erstellen Sie im Allgemeinen immer Exceptions, indem Sie a verwenden, RuntimeExceptionwenn Sie nicht möchten, dass es überprüft wird.

Um zur Laufzeit zu wissen, ob Sie eine geprüfte Ausnahme haben, können Sie Folgendes verwenden:

if(throwable instanceof Exception && !(throwable instanceof RuntimeException)) {
    // this is a checked Exception
    }

Eine geprüfte Ausnahme muss entweder in einer catch-Klausel behandelt oder in der Methodensignatur als ausgelöst deklariert werden. der Compiler erzwingt dies. Im Allgemeinen verwendet man geprüfte Ausnahmen für Ausnahmen, die vom aufrufenden Code behandelt werden sollen, während ungeprüfte Ausnahmen für Bedingungen gelten, die das Ergebnis eines Programmierfehlers sind und durch Korrektur des Codes behoben werden sollten.

Allerdings gibt es in der Java-Community viele Debatten über die Wirksamkeit der Verwendung von geprüften Ausnahmen im Vergleich zu ungeprüften Ausnahmen überall – ein Thema, das in dieser Antwort viel zu tief diskutiert werden kann.

BEARBEITEN 2012-10-23: Als Antwort auf Kommentare (die ziemlich gültig sind), um zu verdeutlichen, wäre Folgendes erforderlich, um festzustellen, ob ein Capture Throwableein Häkchen Throwableim Gegensatz zu einem Häkchen ist Exception:

if(obj instanceof Throwable && !(obj instanceof RuntimeException) && !(obj instanceof Error)) {
    // this is a checked Throwable - i.e. Throwable, but not RuntimeException or Error
    }

Wenn bekannt ist, dass das fragliche Objekt eine Instanz von Throwableist (z. B. wenn es gefangen wurde), wird nur der zweite Teil des obigen „if“ benötigt (z. B. ist das Testen auf Throwable überflüssig).


Beantwortet von –
Lawrence Dol


Antwort geprüft von –
Candace Johnson (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like