Frage

API doc sagt nie fangen Throwable Unterklasse Fehler , das abnorme Verhalten bedeutet. Ist es impliziert, dass die Trennung zwischen Fehlern und Ausnahme ist Programmierer zu sagen, dass der Unterklasse gefangen werden soll und welche nicht? Oder gibt es mehr?

War es hilfreich?

Lösung

Im Allgemeinen ist Error etwas falsch (oft innerhalb der Plattform selbst ), die Sie nicht denkbar umgehen können. Das einzige Mal, das ich je gekümmert über Error Fang ist, um log es , nach dem ich wieder throw dann.

Dies ist von entscheidender Bedeutung, da es leicht zu lassen Fehler (und Runtime-Ausnahmen) den Call-Stack so propagieren bis dass sie nie angemeldet (z executorService.submit(Runnable) verwenden, ohne auf die zurück Future zu hören)

Errors sind in der Regel Dinge wie:

  • der Speicher
  • abstrakte Methode Fehler (zum Beispiel Laufen gegen andere Version von Bibliotheken zu denen gebaut gegen)
  • Assertions (d Programmierer definierte Invarianten , oder Dinge, die nie passieren sollte - lol)

dann würde ich sagen, dass RuntimeExceptions ist in der Regel (aber nicht immer), der Programmierung Fehler:

  • nicht für null Kontrolle oder Weitergabe in null
  • in ungültigen Argumenten zu übergeben, oder ermöglicht ungültigen Zustand
  • Modifizieren einer Sammlung, wie Sie Iterieren über sie sind

würde ich in der Regel empfehlen schnelle Fehler auf diese als gut, aber das ist eine Grauzone; vielleicht Sie nicht Benutzereingaben überprüfen, bevor sie an den Server -hardly wert Absturz der App über vorbei!

Auf Exceptions (das heißt Nicht-Runtime) sollte für Material verwendet werden, dass man vernünftigerweise geschehen und vernünftigerweise erwarten könnte (oder möglicherweise) Griff in Ihrem Code. Ich mag persönlich Ausnahmen geprüft, aber diese sind umständlich gemacht wegen der Ausführlichkeit / Wiederholung im Umgang mit unterschiedlichen Ausnahmetypen in derselben Weise beteiligt ist (das heißt in mehreren identischen Fangblöcken). Sprachen wie Scala haben viel besser fangen Syntax, aber dann entfernt sie das Konzept von überprüft Ausnahmen, wie gut!

Andere Tipps

Ja, ich glaube, Ihre Analyse hier richtig ist - nicht zu fangen Errors soll, weil sie Laufzeitfehler darstellen, die nicht aus, wie OutOfMemoryError gestellt werden kann.

Der einzige Grund, zu fangen Throwable ist, wenn Sie externe Drittanbieter-Code ausgeführt werden, die nicht für den korrekten Betrieb des Programms erforderlich ist - wenn Sie nicht vertrauen, dass Code, alles fangen, und wenn Sie Sachen, die Sie bekommen didn ‚t erwarten (Throwable) dann zu deaktivieren, dass Code und melden sie es.

Auch könnte es eine gute Idee sein, zwischen Exception und RuntimeException zu unterscheiden.

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