it-swarm.com.de

Exception/RunTimeException in Java erweitern?

Ich habe unter Klassen.

public class ValidationException extends RuntimeException {


}

und

public class ValidationException extends Exception {


}

Ich bin verwirrt, wann die benutzerdefinierte Ausnahme RunTimeException und wann Exception erweitert werden muss. Könnten Sie mir bitte erklären, ob es einen Nachteil gibt, RunTimeException direkt zu erweitern?

Vielen Dank!

29
user755806

RuntimeException sind deaktiviert, während Exception aktiviert ist (aufrufender Code muss damit umgehen).

Die benutzerdefinierte Ausnahme sollte RuntimeException erweitern, wenn Sie die Markierung aufheben möchten andernfalls Exception.

Mit ungeprüften Ausnahmen muss die aufrufende Codemethode in ihrer throws-Klausel keine Unterklassen von RuntimeException deklarieren, die möglicherweise während der Ausführung der Methode ausgelöst, aber nicht abgefangen werden.

Da die aufrufende Methode `RuntimeException`` möglicherweise nicht verarbeitet, muss man beim Auslösen von RuntimeException vorsichtig sein.

Laufzeitausnahmen stellen Probleme dar, die das Ergebnis eines Programmierproblems sind, und daher ist nicht zu erwarten, dass der API-Clientcode diese Probleme beseitigt oder in irgendeiner Weise behandelt. Solche Probleme umfassen arithmetische Ausnahmen, wie das Teilen durch Null; Zeigerausnahmen, z. B. der Versuch, über eine Nullreferenz auf ein Objekt zuzugreifen; und Indizieren von Ausnahmen, z. B. der Versuch, über einen zu großen oder zu kleinen Index auf ein Array-Element zuzugreifen.

Laufzeitausnahmen können überall in einem Programm auftreten, und in einem typischen Programm können sie sehr zahlreich sein. Das Hinzufügen von Laufzeitausnahmen in jeder Methodendeklaration würde die Übersichtlichkeit eines Programms beeinträchtigen. Der Compiler erfordert daher nicht, dass Sie Laufzeitausnahmen abfangen oder angeben (obwohl Sie dies können).

Quelle/Literaturhinweis:ngeprüfte Ausnahmen - Die Kontroverse

45
Ankur Shanbhag

Wenn Sie RuntimeException erweitern, müssen Sie es nicht in der Throws-Klausel deklarieren (d. H. Es handelt sich um eine ungeprüfte Ausnahme). Wenn Sie die Ausnahme erweitern, tun Sie dies (es handelt sich um eine geprüfte Ausnahme).

Einige Leute argumentieren, dass alle Ausnahmen von RuntimeException reichen sollten. Wenn Sie jedoch den Benutzer zur Behandlung der Ausnahme zwingen möchten, sollten Sie stattdessen Exception erweitern.

7
Kayaman

Ein Fall, in dem es üblich ist, eine RuntimeException auszulösen, ist der falsche Aufruf einer Methode durch den Benutzer. Eine Methode kann beispielsweise überprüfen, ob eines ihrer Argumente falsch NULL ist. Wenn ein Argument NULL ist, löst die Methode möglicherweise eine NullPointerException aus, bei der es sich um eine ungeprüfte Ausnahme handelt.

Generell sollten Sie keine RuntimeException auslösen oder eine Unterklasse von RuntimeException erstellen, nur weil Sie nicht mit der Angabe der Ausnahmen, die Ihre Methoden auslösen können, belästigen möchten.

Die folgende Richtlinie lautet: Wenn ein Kunde nach einer Ausnahme vernünftigerweise davon ausgehen kann, legen Sie ihn als geprüfte Ausnahme fest. Wenn ein Client nach der Ausnahme nichts wiederherstellen kann, machen Sie ihn zu einer ungeprüften Ausnahme.

für mehr lies das.

6
Batty

Definition von RuntimeException

RuntimeException ist die Oberklasse dieser Ausnahmen, die während des normalen Betriebs der Java Virtual Machine ausgelöst werden können.

RuntimeException und ihre Unterklassen sind ungeprüfte Ausnahmen . Nicht geprüfte Ausnahmen müssen nicht in einer Methode oder .__ deklariert werden. Konstruktor-Throws-Klausel, wenn sie durch die Ausführung von .__ ausgelöst werden können. die Methode oder den Konstruktor und verbreiten sie außerhalb der Methode oder Konstruktorgrenze.

Wenn Sie Exception erweitern, müssen Sie fangen, wo immer Sie Ihre ValidationException werfen.

0
vels4j

Wenn Sie sich in einem Anwendungsframework befinden und Ihr Framework gut mit der Ausnahme umgehen kann, wenn eine Ausnahmebedingungsbenachrichtigung von Ihrem Code vorliegt. In diesem Fall können Sie Ihre benutzerdefinierte Ausnahmeklasse als Unterklasse von RuntimeException verwenden. 

Dies hilft Ihnen, den Code NICHT zu schreiben, um die Ausnahme durch die Ausnahmehierarchie zu behandeln.

0
Sam