Ist eine ungeprüfte Ausnahme, die in einem try Block gefangen wird, eine geprüfte Ausnahme in Java?

8

Mir wurde gesagt, dass in Java ungeprüfte Ausnahmen in einem try-Block abgefangen werden können, aber wenn es abgefangen wird, heißt das nicht eine geprüfte Ausnahme?

    
Anonymous 26.06.2009, 23:46
quelle

3 Antworten

13

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 Klasse Error 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 .):

%Vor%

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:

coobird 26.06.2009, 23:48
quelle
4

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.

    
Bill the Lizard 27.06.2009 00:00
quelle
1

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.

    
duffymo 26.06.2009 23:54
quelle