Die Unterschiede zwischen den Ausnahme- und Fehler
Frage
Ich versuche, mehr über grundlegende Java und die verschiedenen Arten von Throwables zu lernen, kann jemand lassen Sie mich die Unterschiede zwischen Ausnahmen und Fehler wissen?
Lösung
Fehler sollten nicht (außer in den seltensten Fällen) gefangen oder behandelt werden. Ausnahmen sind das Brot und Butter von Ausnahmebehandlung. Das Javadoc es gut erklärt:
Ein Fehler ist eine Unterklasse von Throwable die, dass eine ernsthafte Probleme gibt sinnvolle Anwendung sollte nicht versuchen, zu fangen. Die meisten dieser Fehler sind abnormal Bedingungen.
Schauen Sie sich ein paar der Subklassen von Error
, einige ihrer JavaDoc Kommentare unter:
-
AnnotationFormatError
- Geworfen, wenn die Anmerkung Parser versuchen, eine Anmerkung aus einer Klassendatei zu lesen und feststellen, dass die Anmerkung ungültig ist .
-
AssertionError
- Geworfen, um anzuzeigen, dass eine Behauptung ist fehlgeschlagen .
-
LinkageError
- Subklassen von LinkageError zeigen an, dass eine Klasse eine gewisse Abhängigkeit von einer anderen Klasse hat; jedoch hat diese Klasse incompatibly nach der Erstellung der ehemaligen Klasse geändert. -
VirtualMachineError
- Geworfen, um anzuzeigen, dass die Java Virtual Machine gebrochen ist oder die Ressourcen ausgehen, die für sie weiter zu betreiben.
Es gibt wirklich drei wichtige Unterkategorien von Throwable
:
-
Error
- Etwas schwerer hat genug schief gegangen die meisten Anwendungen abstürzen sollten, anstatt versuchen, das Problem zu umgehen, - Ungeprüfter Exception (aka
RuntimeException
) - Sehr oft ein Programmierfehler wie zum Beispiel einNullPointerException
oder ein illegales Argument. Anwendungen können manchmal von dieserThrowable
Kategorie bearbeiten oder beheben -. Oder zumindest aber auf demrun()
Methode, melden die Beschwerde des Fadens zu fangen, und weiter ausgeführt - Checked Exception (aka Alles anderes) - Anwendungen werden voraussichtlich in der Lage sein, zu fangen und nach Bedeutung etwas zu tun mit dem Rest, wie
FileNotFoundException
undTimeoutException
...
Andere Tipps
Dia zeigt Java Ausnahme Hierarchie von @ georgios-gousios kurz die Unterschiede zwischen Fehlern und Ausnahmen in Java erklärt.
Fehler neigen dazu, das Ende Ihrer Anwendung zu signalisieren, wie Sie sie kennen. Es kann in der Regel nicht aus gestellt werden und sollte dazu führen, dass VM zu beenden. Fang sie sollte möglicherweise nicht außer getan werden, um sich einzuloggen oder zu Anzeige und die entsprechende Meldung vor dem Beenden.
Beispiel: OutOfMemoryError . - Nicht viel können Sie als Ihr Programm kann nicht mehr ausgeführt
Ausnahmen sind oft verwertbare und selbst wenn nicht, sie in der Regel nur bedeuten, eine versuchte Operation gescheitert, aber das Programm kann noch weitermachen.
Beispiel: Illegal -. Bestand ungültige Daten auf ein Verfahren, so dass Call-Methode fehlgeschlagen ist, aber es hat keine Auswirkungen auf zukünftige Operationen
Dies sind verein Beispiele, und es gibt eine andere Fülle von Informationen über nur Ausnahmen allein.
Ein Fehler ist eine Unterklasse von Throwable dass gibt ernsthafte Probleme, dass ein sinnvolle Anwendung sollte nicht versuchen, fängt an.
Fehler -
-
Error
s in Java sind vom Typjava.lang.Error
. - Alle Fehler in Java sind nicht markiert Typ.
-
Error
s zur Laufzeit geschehen. Sie werden nicht an Compiler bekannt sein. - Es ist unmöglich, aus Fehlern zu erholen.
-
Error
s werden meist durch die Umgebung, in der Anwendung ausgeführt wird. - Beispiele:
java.lang.StackOverflowError
,java.lang.OutOfMemoryError
-
Exception
s in Java sind vom Typjava.lang.Exception
. -
Exception
s umfassen sowohl als auch unkontrollierte Art geprüft. - Checked Ausnahmen sind dafür bekannt, Compiler, wo er als ungeprüfte Ausnahmen sind nicht bekannt Compiler, weil sie während der Laufzeit auftreten.
- Sie können von Ausnahmen erholen, indem sie durch
try-catch
Hantierungsbausteinen. -
Exception
s wird hauptsächlich durch die Anwendung selbst verursacht werden. - Beispiele: Checked Ausnahmen:
SQLException
,IOException
Ungeprüfter Ausnahmen:ArrayIndexOutOfBoundException
,ClassCastException
,NullPointerException
Weiterführende Informationen: http://javaconceptoftheday.com/difference- zwischen-error-vs-Ausnahme-in-java /
Die Beschreibung der Error
Klasse ist ganz klar:
Ein
Error
ist eine Unterklasse vonThrowable
dass gibt ernsthafte Probleme, dass ein sinnvolle Anwendung sollte nicht versuchen, fangen. Die meisten dieser Fehler sind anormale Bedingungen. dieThreadDeath
Fehler, wenn ein „normaler“ Zustand ist auch eine Unterklasse vonError
, weil die meisten Anwendungen sollten nicht zu fangen versuchen es.Ein Verfahren ist nicht zu erklären, in erforderlich seine throws-Klausel alle Subklassen von
Error
, die während der geworfen werden könnten, Durchführung des Verfahrens aber nicht gefangen, da diese Fehler anormale Bedingungen das sollte nie auftreten.
Angeführt von Java eigenen Dokumentation der Klasse Error
.
Kurz gesagt, Sie sollten nicht Error
s fangen, außer Sie haben einen guten Grund, dies zu tun. (Zum Beispiel der Implementierung von Web-Server zu verhindern, zum Absturz zu bringen, wenn ein Servlet aus der Erinnerung oder so ähnlich läuft.)
Ein Exception
, auf der anderen Seite, ist nur eine normale Ausnahme wie in jeder anderen modernen Sprache. Sie erhalten eine detaillierte Beschreibung in der Java-API-Dokumentation oder eine Online- oder Offline-Ressource finden.
Es gibt einige Ähnlichkeiten und Unterschiede zwischen den Klassen java.lang.Exception
und java.lang.Error
.
Similarities:
-
Erste - beide Klassen erweitern
java.lang.Throwable
und als Ergebnis erbt viele der Methoden, die häufig verwendet werden sollen, wenn Umgang mit Fehlern wie:getMessage
,getStackTrace
,printStackTrace
und so weiter. -
Zweitens, als Subklassen von
java.lang.Throwable
sind sie beide erben folgende Eigenschaften:-
throwable selbst und einer ihrer Unterklassen (einschließlich
java.lang.Error
) in Verfahren Ausnahmeliste deklariert werdenthrows
Schlüsselwort. Eine solche Erklärung nur fürjava.lang.Exception
und Unterklassen erforderlich, fürjava.lang.Throwable
,java.lang.Error
undjava.lang.RuntimeException
und deren Subklassen ist optional. -
Nur
java.lang.Throwable
und Unterklassen dürfen in dercatch
Klausel verwendet werden. -
Nur
java.lang.Throwable
und Unterklassen können mit Schlüsselwort verwendet werden -.throw
-
Die Schlussfolgerung aus dieser Eigenschaft sowohl folgt java.lang.Error
und java.lang.Exception
können in dem Verfahren Header deklariert werden, kann in catch
Klausel sein, kann mit Stichwort throw
verwendet werden.
Unterschiede:
-
Erste - begriffliche Unterschied:
java.lang.Error
gestaltet zu sein von der JVM geworfen und zeigen ernsthafte Probleme und soll stoppen Programmausführung statt, erwischt zu werden (aber es ist möglich, da für anderejava.lang.Throwable
Nachfolger).Eine Passage von javadoc Beschreibung etwa
java.lang.Error
:... gibt ernsthafte Probleme, dass eine vernünftige Anwendung sollte nicht zu fangen versuchen.
Im Gegensatz
java.lang.Exception
entworfen Fehler darzustellen, erwartet und kann von einem Programmierer behandelt werden, ohne Abschluss Programmausführung.Eine Passage von javadoc Beschreibung etwa
java.lang.Exception
:... gibt Bedingungen, dass eine vernünftige Anwendung könnte wollen Fang.
- Der zweite Unterschied zwischen
java.lang.Error
undjava.lang.Exception
, die zuerst eine nicht aktiviert Ausnahme für Kompilierung-Ausnahmenüberprüfung angesehen werden. Als Ergebnis Code werfenjava.lang.Error
oder ihre Unterklassen erfordern nicht diesen Fehler in der Methode Header zu erklären. Während werfenjava.lang.Exception
erforderlich Deklaration im Methodenkopf.
Throwable und Nachfolgeklassendiagramm (Eigenschaften und Methoden sind weggelassen).
IMO ist ein Fehler, etwas, das Ihre Anwendung kann dazu führen, scheitern und nicht behandelt werden soll. Eine Ausnahme ist etwas, das zu unvorhersehbaren Ergebnissen führen kann, kann aber aus gestellt werden.
Beispiel:
Wenn ein Programm aus dem Speicher ausgeführt wird es ist ein Fehler, wie die Anwendung kann nicht fortgesetzt werden. Wenn jedoch ein Programm einen falschen Eingabetyp akzeptiert es ist eine Ausnahme, da das Programm damit umgehen kann und leiten Sie den korrekten Eingabetyp zu erhalten.
Hier ist eine ziemlich gute Zusammenfassung von Java API, was ein Fehler und Ausnahme repräsentiert:
Ein Fehler ist eine Unterklasse von Throwable, die ernsthaften Probleme gibt, die eine vernünftige Anwendung sollte zu fangen nicht versuchen. Die meisten dieser Fehler sind anormalen Bedingungen. Der Threadfehler, wenn ein „normaler“ Zustand ist auch eine Unterklasse von Fehlern, weil die meisten Anwendungen sollen nicht versuchen, ihn zu fangen.
Ein Verfahren ist nicht zu erklären, in erforderlich seine throws-Klausel alle Subklassen von Fehler, die während der geworfen werden könnten, Durchführung des Verfahrens aber nicht gefangen, da diese Fehler anormale Bedingungen das sollte nie auftreten.
OTOH, für Ausnahmen, Java API sagt:
Die Klasse Exception und ihre Unterklassen sind eine Form von Throwable die Bedingungen, dass eine vernünftige Anwendung zeigt möglicherweise fangen will.
Fehler werden in erster Linie durch die Umgebung, in der Anwendung ausgeführt wird. Zum Beispiel tritt OutOfMemoryError wenn JVM der Speicher ausgeht oder Stackoverflow tritt auf, wenn Stapel überläuft.
Ausnahmen werden hauptsächlich durch die Anwendung selbst verursacht. Zum Beispiel tritt Nullpointer, wenn eine Anwendung versucht, Null-Objekt oder Classcast tritt zuzugreifen, wenn eine Anwendung versucht, nicht kompatibel Klassentypen zu werfen.