1. Métodos para imprimir pistas de pila
Llame activamente a uno de los printStackTrace () = printStackTrace (System.err), printStackTrace (printSteam) y printStackTrace (printWriter).
Si no se procesa una excepción, se lanza directamente después del método principal, se llamará al método de excepción printStackTrace () antes de que salga el programa y, en última instancia, la excepción en el hilo "principal" + printStackTrace ()
2. PISTA DE PISTA
1. PrintStackTrace ()
En primer lugar, es necesario aclarar que este método no proviene de la clase de excepción. A excepción de la definición de varios constructores, todos los métodos se heredan de su clase principal. Los métodos relacionados con las excepciones se heredan de la clase java.lang.throwable. PrintStackTrace () es uno de ellos.
Este método imprime la información de seguimiento de pila del objeto lanzable a la secuencia de salida de error estándar. La salida se ve así:
java.lang.nullpointerexception en myclass.mash (myclass.java:9) en myclass.crunch (myclass.java:6) en myclass.main (myclass.java:3)
La primera línea de salida es la salida del método ToString (). Hablaremos de este método más tarde.
Veamos un ejemplo a continuación:
Public Class TestPrintStackTrace {public static void f () lanza la excepción {tirar nueva excepción ("¡Hay algo mal!"); ) {try {g ();La salida de este ejemplo es la siguiente:
java.lang.exception: ¡algo salió mal! en testprintstacktrace.f (testprintstacktrace.java:3) en testprintstacktrace.g (testprintstacktrace.java:6) en testprintstacktrace.main (testprintstack trace.java:10)
En este ejemplo, se lanza una excepción en el método f (), se llama un método f () en el método g (), se captura una excepción en el método principal y se imprime una información de pista de pila. Por lo tanto, la salida muestra el proceso de f‐> g -> principal a su vez.
2. Método GetStackTrace ()
Este método proporciona acceso programático a la información imprimida por el método PrintStackTrace (). Devuelve una matriz de elementos de pista de pila. La salida anterior es un ejemplo. Guarde estos elementos de la pista de pila en una matriz. Cada elemento corresponde a un marco de pila. El primer elemento de la matriz guarda el elemento superior de la pila, que es la F arriba. El elemento inferior del último elemento guardado.
Aquí hay un ejemplo de usar getStackTrace () para acceder a estos elementos de pila de pistas e imprimir la salida:
Public Class TestPrintStackTrace {public static void f () lanza la excepción {tirar nueva excepción ("¡Hay algo mal!"); ) {try {g (); -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------- ------ -"); para (StackTraceElement Elem: E.GetStackTrace ()) {System.out.println (Elem);}}}Dicha salida es básicamente la misma que la salida de PrintStackTrace (), como sigue:
java.lang.exception: ¡algo salió mal! en testPrintstackTrace.f (testPrintStackTrace.java:3) en testPrintStacktrace.g (testPrintStackTrace.java:6) en testPrintStacktrace.main (testPrintstack.java:10)testPrintStacktRace.f(testPrintStace.Java:3)testpintStAtTace(gintAttAtTAcace. Java: 6) TestPrintStackTrace.Main (testPrintStackTrace.java:10)
Método de tres.fillinstacktrace
El método nativo de FillinStackTrace () devolverá un objeto lanzable, que se crea llenando la información actual de la pila de llamadas en el objeto de excepción original, por lo que la excepción original devuelta sigue siendo la excepción original.
La línea que llama a este método se convertirá en la nueva ubicación de excepción, y se perderá información sobre el punto de ocurrencia de excepción original. Su efecto es equivalente a captar una excepción y volver a crecer otra excepción. La diferencia entre los dos es que la excepción después de FillinStackTrace sigue siendo la excepción original (solo carece de la pista de pila); .
paquete com.jyz.study.jdk.exception; ); static void test2 () {test3 (); La información de la pila de excepciones de 1 y 2 se muestra en la figura:
La diferencia es la información de esto en sí.
Información de la pila de 1
Excepción en el hilo "main" java.lang.nullpointerexception: STR es nulo en com.jyz.study.jdk.exception.fillinstacktrace.test1 (Fillinstacktrace.java:2 0) en com.jyz.study.jdk.exception.fillinstacktrace. Main (FillinStackTrace.Java:13)
2 información de pila
Excepción en el hilo "Main" java.lang.Exception en com.jyz.study.jdk.exception.fillinstacktrace.test1 (fillinstacktrace.java:21) en com.jyz.study.jdk .exception.fillinstacktrace.main (Fillinstacktrace.java : 13)