Frage

Manchmal sehe ich

try {

} catch(Throwable e) {

}

Und manchmal

try {

} catch(Exception e) {

}

Was ist der Unterschied

War es hilfreich?

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.

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