Saltar al contenido

Diferencia entre e.printStackTrace y System.out.println (e)

Solución:

El flujo de salida utilizado no es el mismo que señaló @Brian, pero el nivel de detalle tampoco es el mismo; puede probar con la prueba simple a continuación. Producción:

Con println: solo sabes qué excepción se ha lanzado

java.lang.UnsupportedOperationException: aún no implementado

Con printStackTrace: también sabes qué lo causó (números de línea + pila de llamadas)

java.lang.UnsupportedOperationException: aún no implementado
en javaapplication27.Test1.test (Test1.java:27)
en javaapplication27.Test1.main (Test1.java:19)

public static void main(String[] args){
    try {
        test();
    } catch (UnsupportedOperationException e) {
        System.out.println(e);
        e.printStackTrace();
    }
}

private static void test() {
    throw new UnsupportedOperationException("Not yet implemented");
}

Si utiliza System.out.println, entonces estás volcando tus errores al stdout, no stderr.

Es tradicional volcar los errores al error estándar, por lo que puede filtrar la salida normal exitosa de la salida del error. Es una práctica común para las utilidades de línea de comandos y, en consecuencia, una buena idea a seguir.

p.ej

myCommand 2> /tmp/errors > /tmp/results

escribirá los errores en un registro y los resultados en otro. Dependiendo de su shell / proceso de invocación, etc., puede combinar esta información, descartar errores, reaccionar si se producen errores, etc. Consulte aquí para obtener más información.

Utilizando printStackTrace() es una buena idea, ya que está eliminando el lugar donde tuvo lugar la excepción. Esto a menudo es invaluable para rastrear errores que son inesperados, ya que le dará un puntero directo (aunque detallado) hacia el lugar exacto donde se encontró con un error.

System.out.println(e) es equivalente a System.out.println(e.toString()): System.out es un PrintStream, PrintStream.println(Object o) llamadas PrintStream.println(o.toString()).

e.toString() devuelve el nombre de la clase y el getLocalizedMessage () de la excepción.

e.printStackTrace() escribe esa información en System.err (no System.out) y además un seguimiento de pila, es decir, la cadena de métodos que condujeron a la excepción. Ésta es información útil.

A menudo pensé que sería bueno si hubiera un método que devuelva una cadena que contenga la información que genera e.printStackTrace(). Ya que no tienes que usar e.getStackTrace() y escriba su propia rutina para generar la matriz resultante de StackTraceElements.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *