2010-04-01 67 views
71

Estoy pasando por un programa de socket. En él, se llama al printStackTrace en el objeto IOException en el bloque catch.
¿Qué hace realmente printStackTrace()?¿Cuál es el uso del método printStackTrace() en Java?

catch(IOException ioe) 
{ 
    ioe.printStackTrace(); 
} 

No me consta su finalidad. ¿Para qué se usa esto?

+36

Una de las características más potentes en la moderna IDE es la capacidad de buscar la documentación (llamado javadoc) para un método Java dado. En Eclipse, es Shift-F2 cuando el cursor se coloca en el nombre del método printStackTrace. –

+2

Parece que eres nuevo en Java. Aquí hay algo para leer: http://today.java.net/article/2006/04/04/exception-handling-antipatterns – TJR

+0

También puede leer el código de printStackTrace() para ver exactamente qué hace y cómo lo hace eso. –

Respuesta

81

Es prints the stack trace of the Exception to System.err.

Es una herramienta muy simple, pero muy útil para diagnosticar una excepción. Te dice qué sucedió y en qué parte del código sucedió esto.

+1

Y gracias a las excepciones comprobadas es probable que sea el contenido # 1 de bloques 'catch' :-) – Joey

+1

@Joey O' throw new RuntimeException (e) ' –

13

Ayuda a rastrear la excepción. Por ejemplo, está escribiendo algunos métodos en su programa y uno de sus métodos causa errores. Luego, la impresión de registros te ayudará a identificar qué método causa el error. Stack te ayudará de la siguiente manera:

Primero, se llamará e insertará tu método principal para apilar, luego se llamará e insertará el segundo método a la pila en orden LIFO y si ocurre algún error dentro de cualquier método, entonces esta pila ayuda a identificar ese método.

33

que era una especie de curiosidad acerca de esto también, así que sólo hay que poner juntos un poco de código de ejemplo donde se puede ver lo que está haciendo:

try { 
    throw new NullPointerException(); 
} 
catch (NullPointerException e) { 
    System.out.println(e); 
} 

try { 
    throw new IOException(); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 
System.exit(0); 

Calling println(e):

java.lang.NullPointerException

Llamando e.printStackTrace():

java.io.IOException 
     at package.Test.main(Test.java:74) 
+0

Esto es normal, con el 1er llama al toString() del error, y en el 2do pides imprimir todo el stackTrace del error Eso es 2 cosas diferentes. – Jon

+0

'System.err.println (e);' será más apropiado. – roottraveller

4

printStackTrace() impresiones de los lugares en los que se produjo la excepción en el código fuente, lo que permite al autor que escribió el programa para ver lo que salió mal. Pero dado que muestra problemas en el código fuente, los usuarios que pueden o no tener alguna experiencia de codificación pueden no ser capaces de entender qué salió mal, por lo que si el programa permite al usuario enviar mensajes de error a los autores, el los usuarios pueden no ser capaces de dar buenos datos sobre lo que salió mal.

usted debe considerar el método Logger.getLogger(), ofrece una instalación (registro) mejor manejo de excepciones, y además printStackTrace() sin argumentos se considera que es obsoleto y sólo debe ser utilizado para propósitos de depuración, no para la visualización del usuario.

10

printStackTrace() ayuda al programador a comprender dónde se produjo el problema real. printStacktrace() es un método de la clase Throwable del paquete java.lang. Imprime varias líneas en la consola de salida. La primera línea consta de varias cadenas. Contiene el nombre de la subclase Throwable & la información del paquete. A partir de la segunda línea, se describe el número de posición/línea de error que comienza con at.

La última línea siempre describe el destino afectado por el error/excepción.La segunda última línea nos informa sobre la siguiente línea en la pila donde va el control después de obtener la transferencia del número de línea descrito en la última línea. Los errores/excepciones representan la salida en forma de pila, que se introdujo en la pila mediante el método fillInStackTrace() de la clase Throwable, que a su vez rellena los detalles de transferencia de control de programa en la pila de ejecución. Las líneas que comienzan con at, no son más que los valores de la pila de ejecución. De esta manera, el programador puede entender dónde está el problema en el código.

Junto con el método printStackTrace(), es una buena idea usar e.getmessage().

+0

Buena suerte al responder una pregunta de 5 años, con una respuesta aceptada, y donde el iniciador debería haber buscado la referencia en lugar de publicar en un foro. – Javier

+4

Bueno, gracias Javier. Parece que todavía tengo un lector. –

+1

'' post.readers ++; '' –

0

¿Cuál es el uso del método e.printStackTrace() en Java?

Bueno, el propósito de usar este método e.printStackTrace(); es ver qué es exactamente lo que está mal.

Por ejemplo, queremos manejar una excepción. Echemos un vistazo al siguiente ejemplo.

public class Main{ 

    public static void main(String[] args) { 

    int a = 12; 
    int b = 2; 

    try { 
     int result = a/(b - 2); 
     System.out.println(result); 
    } 

    catch (Exception e) 
    { 
     System.out.println("Error: " + e.getMessage()); 
     e.printStackTrace(); 
    } 
    } 
} 

He usado el método e.printStackTrace(); con el fin de mostrar exactamente lo que está mal.

En la salida, podemos ver el siguiente resultado.

Error:/by zero 

java.lang.ArithmeticException:/by zero 

    at Main.main(Main.java:10) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
2

El printStackTrace() ayuda al programador a entender dónde se produjo el problema real. El método printStackTrace() es un miembro de la clase Throwable en el paquete java.lang.

0

printStackTrace es un método de la clase Throwable. este método muestra el mensaje de error en la consola donde obtenemos la excepción del código fuente. Estos métodos se pueden usar con catch block y describen:

  1. Nombre de la excepción.
  2. Descripción de la excepción.
  3. Dónde obtenemos la excepción.

Existen tres métodos que describen la excepción en la consola en la que printStackTrace es uno de ellos. estos tres métodos son:

  1. printStackTrace()
  2. toString()
  3. getMessage()

Ejemplo:

public class BabluGope { 
    public static void main(String[] args) { 
     try { 
      System.out.println(10/0); 
     } catch (ArithmeticException e) { 
      e.printStackTrace(); 
      // System.err.println(e.toString()); 
      //System.err.println(e.getMessage()); 
     } 
    } 
} 
Cuestiones relacionadas