Unterschied zwischen der Verwendung von Throwable und Ausnahme in einem Try-Catch
-
20-09-2019 - |
Frage
Manchmal sehe ich
try {
} catch(Throwable e) {
}
Und manchmal
try {
} catch(Exception e) {
}
Was ist der Unterschied
Lösung
Mit dem Throwable
Fang enthält es Dinge, die Unterklasse Error
. Sie sollten in der Regel nicht tun, außer vielleicht auf allerhöchstem Niveau eines Fadens „alle fangen“, wo Sie oder sonst Griff absolut alles protokollieren wollen, die schief gehen können. Es wäre eher typisch in einem Gerüsttyp Anwendung (zum Beispiel eines Anwendungsserver oder eine Test-Framework), wo es mit unbekanntem Code ausgeführt werden und nicht durch folgende Faktoren beeinträchtigt werden sollte alles , die mit diesem Code schief geht, wie viel wie möglich.
Andere Tipps
Der erste fängt alle Subklassen von Throwable
(dies schließt Exception
und Error
), fängt die zweite alle Subklassen von < a href = "http://java.sun.com/javase/6/docs/api/java/lang/Exception.html" rel = "noreferrer"> Exception
.
Error
ist programmatisch nicht behebbar in irgendeiner Weise und ist in der Regel nicht gefangen werden, mit Ausnahme der Protokollierung (die es wieder durchgeht). Exception
ist programmatisch erstattungsfähig. Seine Unterklasse RuntimeException
zeigt einen Programmierfehler und ist in der Regel nicht so gut aufgefangen werden.
Throwable
ist super Klasse von Exception
sowie Error
. Im Normalfall sollten wir immer Unterklassen von Exception
fangen, so dass die Ursache nicht verloren gehen.
Nur spezielle Fälle, in denen Sie die Möglichkeit der Dinge sehen falsch gehen, die nicht in der Kontrolle von Java-Code, sollten Sie Error
oder Throwable
fangen.
Ich erinnere mich, Throwable zu Flagge zu kontrollieren, dass eine native Bibliothek nicht geladen ist.
Thowable
fängt wirklich alles selbst Thread die standardmäßig geworfen wird ein Faden von der jetzt veraltet Thread.stop()
Verfahren zu stoppen. Also von Throwable
fangen Sie können sicher sein, dass Sie nie ohne zumindest gehen durch Ihre catch-Block den try-Block verlassen, aber Sie sollten auch Griff OutOfMemoryError
und InternalError
oder StackOverflowError
hergestellt werden.
Catching Throwable
ist sehr nützlich für äußeree Server-Schleifen, die alle Arten von Anfragen an externem Code delegieren, sondern kann selbst beenden nie den Dienst am Leben zu erhalten.