1. Methoden zum Drucken von Stapelspuren
Rufen Sie aktiv eine der Throwable -Objekte PrintStacktrace () = printStacktrace (System.err), PrintStacktrace (PrintStream) und PrintStacktrace (Printwriter) an.
Wenn eine Ausnahme nicht verarbeitet wird, wirft sie direkt nach der Hauptmethode aus, die Methode für die Ausnahme von PrintStacktrace () wird vor dem Ausgang des Programms aufgerufen und letztendlich in Thread "Main" + printStacktrace () ausnahmbar
2. Stack Track
1. Printstacktrace ()
Zunächst muss klargestellt werden, dass diese Methode nicht aus der Ausnahmeklasse stammt. Mit Ausnahme mehrerer Konstruktoren werden alle Methoden aus ihrer Elternklasse geerbt. Die Methoden im Zusammenhang mit Ausnahmen werden aus der Klasse java.lang.Throwable geerbt. printStacktrace () ist einer von ihnen.
Diese Methode druckt die Stapelspurinformationen des Throwable -Objekts in den Standardfehlerausgabemestream. Die Ausgabe sieht so aus:
java.lang.nullpointerexception bei myclass.mash (myclass.java:9) bei myclass.crunch (myclass.java:6) bei myclass.main (myclass.java:3)
Die erste Ausgangslinie ist die Ausgabe der TOString () -Methode. Wir werden später über diese Methode sprechen.
Lassen Sie uns unten ein Beispiel sehen:
public class testprintstacktrace {public static void f () Ausnahme ausreißend {neue Ausnahme (es gibt etwas falsch! "); ) {try {g ();Die Ausgabe dieses Beispiels ist wie folgt:
Java.lang.Exception: Etwas ist schief gelaufen! at testPrintStacktrace.f (testPrintStacktrace.java:3) unter testPrintStacktrace.g (testPrintStacktrace.java:6) unter testprintstacktrace.main (testprintstack trace.java:10)
In diesem Beispiel wird eine Ausnahme in Methode f (), eine Methode f () aufgerufen, in Methode G (), eine Ausnahme in der Hauptmethode, und eine Stack -Track -Informationen werden gedruckt. Daher zeigt der Ausgang den Prozess von F —> G -> Main wiederum.
2. GetStacktrace () -Methode
Diese Methode bietet den programmatischen Zugriff auf die von der PrintStackTrace () -Methode gedruckte Informationen. Es gibt eine Reihe von Stapel -Track -Elementen zurück. Die obige Ausgabe ist ein Beispiel. Speichern Sie diese Stapel -Track -Elemente in einem Array. Jedes Element entspricht einem Stapelrahmen. Das erste Element des Arrays speichert das obere Element des Stapels, nämlich das F. oben. Das untere Element des letzten gespeicherten Elements.
Hier ist ein Beispiel für die Verwendung von GetStacktrace (), um auf diese Track -Stack -Elemente zuzugreifen und die Ausgabe auszudrucken:
public class testprintstacktrace {public static void f () Ausnahme ausreißend {neue Ausnahme (es gibt etwas falsch! "); ) {try {g (); -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------- ------------------------------------ ------ -"); für (stacktraceElement elem: e.getStacktrace ()) {System.out.println (Elem);}}}}Eine solche Ausgabe ist im Grunde die gleiche wie die Ausgabe von PrintStackTrace () wie folgt:
Java.lang.Exception: Etwas ist schief gelaufen! bei testPrintStacktrace.f (testPrintStacktrace.java:3) unter testPrintstacktrace.g (testPrintStacktrace.java:6) unter testprintstacktrace.main (testprintstack trace.java:10) Java: 6) TestPrintStacktrace.main (testPrintStacktrace.java:10)
Drei.FillinStacktrace -Methode
Die native FillinStacktrace () -Methode gibt ein werbendes Objekt zurück, das durch Füllen der aktuellen Call -Stack -Informationen in das ursprüngliche Ausnahmebobjekt erstellt wird. Die zurückgegebene ursprüngliche Ausnahme ist also immer noch die ursprüngliche Ausnahme.
Die Zeile, die diese Methode aufruft, wird zum neuen Standort für den neuen Standort, und Informationen über den ursprünglichen Ausnahmepunktpunkt gehen verloren. Sein Effekt entspricht einer Ausnahme und einer anderen Ausnahme. Der Unterschied zwischen den beiden besteht darin, dass die Ausnahme nach FillinStacktrace immer noch die ursprüngliche Ausnahme ist (nur die Stapelspur), wenn eine Ausnahme erneut mit den ursprünglichen Ausnahmeinformationen zu tun hat (natürlich gibt es keine Stapelspur) .
Paket com.jyz.study.jdk.exception; ); statischer void test2 () {test3 (); Die Ausnahmestapelinformationen von 1 und 2 sind in der Abbildung dargestellt:
Der Unterschied ist die Informationen davon selbst.
Stapelinformationen von 1
Ausnahme in Thread "Main" java.lang.nullpointerexception: STR is null unter com.jyz.study.jdk.exception.Fillinstacktrace.test1 (fillinstacktrace.java:2 0) bei Com.jyz.study.jdk.Exception.fillinStacktrace. Haupt (FillinStacktrace.java:13)
2 Stapelinformationen
Ausnahme in Thread "Main" java.lang.exception unter com.jyz.study.jdk.exception.Fillinstacktrace.test1 (fillinstacktrace.java:21) unter com.jyz.study.jdk .Exception.FillinStacktrace.main (fillinstacktrace.java : 13)