Nicht gemeldete Ausnahme: Bedeutung und Lösung
Java-Programmierer stoßen häufig auf Fehler, die wie folgt formuliert sind:
"Fehler: nicht gemeldete Ausnahme, wobei XXX der Name von ist eine Ausnahmeklasse.“
Bedeutung und Java Konzepte
Dieser Fehler bedeutet, dass:
- Der Code löst eine geprüfte Ausnahme (XXX) aus oder gibt sie weiter.
- Die Ausnahme wird nicht ordnungsgemäß behandelt indem Sie es abfangen oder als erforderlich deklarieren Java.
Lösung
Um das Problem zu beheben, haben Sie zwei Möglichkeiten:
-
Ausnahme abfangen: Verwenden Sie einen try ... Catch-Block, um die Ausnahme innerhalb der aktuellen Methode zu behandeln.
-
Deklarieren dass die Methode die Ausnahme auslöst: Fügen Sie das Schlüsselwort throws gefolgt vom Namen der Ausnahme in der Methoden- oder Konstruktorsignatur hinzu, um die Verantwortung für die Ausnahmebehandlung an den Aufrufer zu übergeben.
Überprüft vs. ungeprüfte Ausnahmen
Java klassifiziert Ausnahmen in zwei Kategorien Typen:
-
Geprüfte Ausnahmen: Throwable, Exception (und Unterklassen), ausgenommen RuntimeException und seine Unterklassen.
-
Ungeprüfte Ausnahmen: Fehler (und Unterklassen), RuntimeException (und Unterklassen).
Geprüfte Ausnahmen erfordern eine explizite Behandlung, während ungeprüfte Ausnahmen dies nicht tun.
Beispiel: Werfen und Fangen in derselben Methode
static void t() throws IllegalAccessException {
try {
throw new IllegalAccessException("demo");
} catch (IllegalAccessException e) {
System.out.println(e);
}
}
Nach dem Login kopieren
In diesem Beispiel löst die t-Methode eine Ausnahme aus, die jedoch auch innerhalb derselben Methode abgefangen und behandelt wird. Daher sollte die Throws-Deklaration in der Signatur entfernt werden.
Bad Practices mit Ausnahmen
Vermeiden Sie die folgenden Bad Practices:
-
Ausnahme abfangen (oder auslösbar): Stattdessen werden bestimmte Ausnahmen abgefangen, um unbeabsichtigte Ausnahmen zu verhindern Behandlung.
-
Methoden als auslösende Ausnahme deklarieren: Vermeiden Sie es, Aufrufer zu zwingen, potenziell geprüfte Ausnahmen zu behandeln.
-
Ausnahmen unterdrücken: Ausnahmen nicht ignorieren weil sie die Diagnose von Laufzeitfehlern erschweren können.
Besonderes Fälle
-
Statische Initialisierer: Statische Variablen deklarieren, die geprüfte Ausnahmen in statischen Blöcken anstelle von Felddeklarationen auslösen.
-
Statische Blöcke: Abgefangene Ausnahmen innerhalb statischer Blöcke müssen innerhalb des Blocks behandelt werden, da es keine Umschließung gibt Kontext.
-
Lambdas: Lambdas können aufgrund der Anforderungen an die Funktionsschnittstelle keine ungeprüften Ausnahmen auslösen. Behandeln Sie Ausnahmen innerhalb des Lambda selbst.
-
Zwei Ausnahmen mit demselben Namen: Wenn der Compiler trotz Vorhandensein des Schlüsselworts throws einen Fehler „nicht gemeldete Ausnahme“ meldet, prüfen Sie, ob die Ausnahmenamen unterschiedlich sind vollqualifizierte Namen, die auf verschiedene Ausnahmen hinweisen.
Weitere Informationen Informationen
Ausführliche Informationen zu Java-Ausnahmen finden Sie in den folgenden Ressourcen:
- [Oracle Java Tutorial: Die Catch- oder Specify-Anforderung](https://docs.oracle .com/javase/tutorial/essential/Exceptions/catchOrDeclare.html)
- [Abfangen und Behandeln Ausnahmen](https://docs.oracle.com/javase/tutorial/essential/Exceptions/handling.html)
- [Angeben der von einer Methode ausgelösten Ausnahmen](https://docs.oracle.com /javase/tutorial/essential/Exceptions/throwing.html)
Das obige ist der detaillierte Inhalt vonWas sind die Ursachen und Lösungen für „Unreported Exception'-Fehler in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!