Aktivierte und deaktivierte Ausnahmen in Java

1. Übersicht

Java-Ausnahmen lassen sich in zwei Hauptkategorien einteilen: aktivierte Ausnahmen und nicht aktivierte Ausnahmen . In diesem Artikel finden Sie einige Codebeispiele zu deren Verwendung.

2. Überprüfte Ausnahmen

Im Allgemeinen stellen geprüfte Ausnahmen Fehler dar, die außerhalb der Kontrolle des Programms liegen. Zum Beispiel kann der Konstruktor von Fileinputstream wirft FileNotFoundException , wenn die Eingabedatei nicht existiert.

Java überprüft geprüfte Ausnahmen zur Kompilierungszeit.

Deshalb sollten wir verwenden das wirft Schlüsselwort eine geprüfte Ausnahme zu erklären:

private static void checkedExceptionWithThrows() throws FileNotFoundException { File file = new File("not_existing_file.txt"); FileInputStream stream = new FileInputStream(file); }

Wir können auch einen Try-Catch- Block verwenden, um eine aktivierte Ausnahme zu behandeln:

private static void checkedExceptionWithTryCatch() { File file = new File("not_existing_file.txt"); try { FileInputStream stream = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } }

Einige häufig überprüfte Ausnahmen in Java sind IOException , SQLException und ParseException .

Die Ausnahmeklasse ist die Oberklasse der geprüften Ausnahmen. Daher können wir eine benutzerdefinierte geprüfte Ausnahme erstellen, indem wir Exception erweitern :

public class IncorrectFileNameException extends Exception { public IncorrectFileNameException(String errorMessage) { super(errorMessage); } } 

3. Deaktivierte Ausnahmen

Wenn ein Programm eine ungeprüfte Ausnahme auslöst, spiegelt dies einen Fehler in der Programmlogik wider. Wenn wir beispielsweise eine Zahl durch 0 teilen, löst Java eine ArithmeticException aus :

private static void divideByZero() { int numerator = 1; int denominator = 0; int result = numerator / denominator; } 

Java überprüft keine ungeprüften Ausnahmen zur Kompilierungszeit. Furtheremore, wir müssen nicht ungeprüft Ausnahmen in einer Methode deklarieren mit dem wirft Schlüsselwort. Und obwohl der obige Code während der Kompilierungszeit keine Fehler aufweist, wird zur Laufzeit eine ArithmeticException ausgelöst.

Einige häufige nicht aktivierte Ausnahmen in Java sind NullPointerException , ArrayIndexOutOfBoundsException und IllegalArgumentException .

Die RuntimeException- Klasse ist die Oberklasse aller nicht aktivierten Ausnahmen. Daher können wir eine benutzerdefinierte ungeprüfte Ausnahme erstellen, indem wir RuntimeException erweitern :

public class NullOrEmptyException extends RuntimeException { public NullOrEmptyException(String errorMessage) { super(errorMessage); } }

4. Wann werden geprüfte und nicht geprüfte Ausnahmen verwendet?

Es wird empfohlen, Ausnahmen in Java zu verwenden, damit wir den Fehlerbehandlungscode vom regulären Code trennen können. Wir müssen jedoch entscheiden, welche Art von Ausnahme ausgelöst werden soll. Die Oracle Java-Dokumentation enthält Anleitungen zur Verwendung von aktivierten und nicht aktivierten Ausnahmen:

„Wenn von einem Client vernünftigerweise erwartet werden kann, dass er sich von einer Ausnahme erholt, machen Sie ihn zu einer aktivierten Ausnahme. Wenn ein Client nichts tun kann, um die Ausnahme zu beheben, machen Sie sie zu einer nicht aktivierten Ausnahme. “

Bevor wir beispielsweise eine Datei öffnen, können wir zunächst den Namen der Eingabedatei überprüfen. Wenn der Name der Benutzereingabedatei ungültig ist, können wir eine benutzerdefinierte geprüfte Ausnahme auslösen:

if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException("Incorrect filename : " + fileName ); } 

Auf diese Weise können wir das System wiederherstellen, indem wir den Namen einer anderen Benutzereingabedatei akzeptieren. Wenn der Name der Eingabedatei jedoch ein Nullzeiger oder eine leere Zeichenfolge ist, bedeutet dies, dass der Code einige Fehler enthält. In diesem Fall sollten wir eine ungeprüfte Ausnahme auslösen:

if (fileName == null || fileName.isEmpty()) { throw new NullOrEmptyException("The filename is null or empty."); } 

5. Schlussfolgerung

In diesem Artikel haben wir den Unterschied zwischen aktivierten und nicht aktivierten Ausnahmen erläutert. Wir haben auch einige Codebeispiele bereitgestellt, um zu zeigen, wann aktivierte oder nicht aktivierte Ausnahmen verwendet werden sollen.

Wie immer finden Sie den gesamten Code in diesem Artikel auf GitHub.