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?

War es hilfreich?

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 ein NullPointerException oder ein illegales Argument. Anwendungen können manchmal von dieser Throwable Kategorie bearbeiten oder beheben -. Oder zumindest aber auf dem run() 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 und TimeoutException ...

Andere Tipps

Dia zeigt Java Ausnahme Hierarchie von @ georgios-gousios kurz die Unterschiede zwischen Fehlern und Ausnahmen in Java erklärt.

 Java Exception-Hierarchie

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.

setzt es am besten :

  

Ein Fehler ist eine Unterklasse von Throwable   dass gibt ernsthafte Probleme, dass ein   sinnvolle Anwendung sollte nicht versuchen,   fängt an.

Fehler -

  1. Errors in Java sind vom Typ java.lang.Error.
  2. Alle Fehler in Java sind nicht markiert Typ.
  3. Errors zur Laufzeit geschehen. Sie werden nicht an Compiler bekannt sein.
  4. Es ist unmöglich, aus Fehlern zu erholen.
  5. Errors werden meist durch die Umgebung, in der Anwendung ausgeführt wird.
  6. Beispiele: java.lang.StackOverflowError, java.lang.OutOfMemoryError

Ausnahmen -

  1. Exceptions in Java sind vom Typ java.lang.Exception.
  2. Exceptions umfassen sowohl als auch unkontrollierte Art geprüft.
  3. Checked Ausnahmen sind dafür bekannt, Compiler, wo er als ungeprüfte Ausnahmen sind nicht bekannt Compiler, weil sie während der Laufzeit auftreten.
  4. Sie können von Ausnahmen erholen, indem sie durch try-catch Hantierungsbausteinen.
  5. Exceptions wird hauptsächlich durch die Anwendung selbst verursacht werden.
  6. Beispiele: Checked Ausnahmen: SQLException, IOException
    Ungeprüfter Ausnahmen: ArrayIndexOutOfBoundException, ClassCastException, NullPointerException

Weiterführende Informationen: http://javaconceptoftheday.com/difference- zwischen-error-vs-Ausnahme-in-java / http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png

Die Beschreibung der Error Klasse ist ganz klar:

  

Ein Error ist eine Unterklasse von Throwable   dass gibt ernsthafte Probleme, dass ein   sinnvolle Anwendung sollte nicht versuchen,   fangen. Die meisten dieser Fehler sind   anormale Bedingungen. die ThreadDeath   Fehler, wenn ein „normaler“ Zustand ist   auch eine Unterklasse von Error, 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 Errors 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 werden throws Schlüsselwort. Eine solche Erklärung nur für java.lang.Exception und Unterklassen erforderlich, für java.lang.Throwable, java.lang.Error und java.lang.RuntimeException und deren Subklassen ist optional.

    • Nur java.lang.Throwable und Unterklassen dürfen in der catch 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 andere java.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 und java.lang.Exception, die zuerst eine nicht aktiviert Ausnahme für Kompilierung-Ausnahmenüberprüfung angesehen werden. Als Ergebnis Code werfen java.lang.Error oder ihre Unterklassen erfordern nicht diesen Fehler in der Methode Header zu erklären. Während werfen java.lang.Exception erforderlich Deklaration im Methodenkopf.

Throwable und Nachfolgeklassendiagramm (Eigenschaften und Methoden sind weggelassen). eingeben Bild Beschreibung hier

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.

Quelle: Unterschied zwischen Fehlern Vs Ausnahme in Java

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top