Ungeprüfte Ausnahmen sind Ausnahmen, die nicht in einem try
- catch
-Block abgefangen werden müssen. Ungeprüfte Ausnahmen sind Unterklassen der RuntimeException
oder Error
Klassen.
Geprüfte Ausnahmen sind Ausnahmen, die in einem try
- catch
Block abgefangen werden müssen.
Die Definition von aktivierten und deaktivierten Ausnahmen finden Sie in Abschnitt 11.2 : Kompilierzeitüberprüfung von Ausnahmen von Die Java-Sprachspezifikation :
Die ungeprüften Ausnahmenklassen sind die Klasse
RuntimeException
und ihre Unterklassen und die KlasseError
und seine Unterklassen. Alle anderen Ausnahmen Klassen sind geprüfte Ausnahmeklassen.
Nur weil eine ungeprüfte Ausnahme in einem catch
-Block abgefangen wird, wird sie nicht zu einer überprüften Ausnahme. Es bedeutet nur, dass die ungeprüfte Ausnahme abgefangen wurde und im Block catch
behandelt wurde.
Man könnte catch
eine unchecked Ausnahme und dann throw
eine neue checked Ausnahme haben, also alle Methoden, die diese Methode aufrufen, wo eine ungeprüfte Ausnahme auftreten könnte, und eine Methode erzwingen, die sie aufruft, um irgendeine Art von Ausnahme zu behandeln. p>
Beispiel: Ein NumberFormatException
, das ausgelöst werden kann, wenn einige nicht vererbbare String
auf die Methode Integer.parseInt
angewendet werden, ist eine nicht geprüfte Ausnahme, sodass sie nicht abgefangen werden muss. Die Methode, die diese Methode aufruft, möchte jedoch möglicherweise, dass ihr Aufrufer ein solches Problem richtig behandelt, sodass sie eine weitere Ausnahme auslösen kann, die überprüft wird (keine Unterklasse von RuntimeException
.):
Im obigen Beispiel wird ein NumberFormatException
im Block try
- catch
abgefangen, und ein neues BadInputException
(das eine geprüfte Ausnahme sein soll) wird ausgelöst.
Jeder Aufrufer der getIntegerFromInput
-Methode wird gezwungen, eine BadInputException
abzufangen und gezwungen, schlechte Eingaben zu verarbeiten. Wenn die NumberFormatException
nicht abgefangen und verarbeitet werden, müssen alle Aufrufer dieser Methode die Ausnahme korrekt behandeln.
(Es sollte auch darauf hingewiesen werden, eine Ausnahme zu essen und etwas zu tun, das nicht wirklich sinnvoll ist, wird nicht als gute Praxis angesehen - behandeln Sie Ausnahmen, bei denen eine sinnvolle Ausnahmebehandlung durchgeführt werden kann.)
Aus den Java-Lernprogrammen:
Nein, es wird keine geprüfte Ausnahme genannt, nur weil sie abgefangen wurde. Ein catch-Block kann geschrieben werden, um irgendeine Art von Exception oder Error zu erfassen. Geprüfte Ausnahmen sind solche, die der Fang- oder Anforderungsspezifikation unterliegen Sie sind erforderlich , um sie entweder abzufangen oder zu deklarieren, dass Ihre Methode sie möglicherweise auslöst. Sie können sich den Begriff checked so vorstellen, dass der Compiler überprüft, ob Sie den Catch einhalten oder die Anforderung angeben. Fehler und RuntimeExceptions werden unchecked -Ausnahmen genannt, weil der Compiler diese Anforderung nicht für sie erzwingt.
Ich denke, der Unterschied besteht darin, dass der Compiler uncaught checked Ausnahmen und Methoden markiert, die checked Ausnahmen auslösen, aber sie nicht in der Methodensignatur zur Kompilierzeit deklarieren.
Ungeprüfte Ausnahmen müssen weder deklariert noch abgefangen werden, aber beides ist nicht verboten. Der Compiler identifiziert sie einfach nicht als Fehler.
Tags und Links java exception checked-exceptions