65 votes

Différence entre printStackTrace() et toString()

Je suis curieux de savoir quelle est la différence entre printStackTrace() et toString(). À première vue, ils semblent faire exactement la même chose.

Code:

 try {
// Some code
} catch (Exception e)
   e.printStackTrace();
   // OR
   e.toString()
}

63voto

RenaudBlue Points 533

Pour convertir StackTrace en String, une implémentation plus courte que j'utilise est :

 public static String exceptionStacktraceToString(Exception e)
{
    return Arrays.toString(e.getStackTrace());
}

1voto

vikiiii Points 4013

toString () donne le nom de la classe d'exception lorsque l'exception est déclenchée et printStackTrace () donne la hiérarchie d'entrée de l'exécution de la méthode qui était présente lorsque l'exception est déclenchée dans l'application.

Pour le code

     try 
    {
        List<String>  n =new ArrayList<String>();
        String i = n.get(3); 
    }catch (Exception e) {
        e.printStackTrace();
    }
   }

e.printStackTrace() donnera

 java.lang.IndexOutOfBoundsException: Index: 3, Size: 0
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at com.o2.business.util.Trial.test(CommonUtilsTest.java:866)

Alors que e.toString() n'imprimera rien comme Jon l'a écrit dans sa réponse.

1voto

KP_ Points 371

Je pense que vous voulez obtenir la sortie de Throwable.printStackTrace() , exactement comme ce que je cherchais. J'ai vérifié le code source Java et mis en place un String au lieu d'écrire dans un PrintStream . C'est un peu plus complet que la solution @MartijnCourteaux mais me semble un peu comme un hack.

Quant à votre réponse, vous pouvez en fait voir que Throwable.toString() n'est qu'une partie de Throwable.printStackTrace() :

 public static String getStackTraceString(Throwable e) {
    return getStackTraceString(e, "");
}

private static String getStackTraceString(Throwable e, String indent) {
    StringBuilder sb = new StringBuilder();
    sb.append(e.toString());
    sb.append("\n");

    StackTraceElement[] stack = e.getStackTrace();
    if (stack != null) {
        for (StackTraceElement stackTraceElement : stack) {
            sb.append(indent);
            sb.append("\tat ");
            sb.append(stackTraceElement.toString());
            sb.append("\n");
        }
    }

    Throwable[] suppressedExceptions = e.getSuppressed();
    // Print suppressed exceptions indented one level deeper.
    if (suppressedExceptions != null) {
        for (Throwable throwable : suppressedExceptions) {
            sb.append(indent);
            sb.append("\tSuppressed: ");
            sb.append(getStackTraceString(throwable, indent + "\t"));
        }
    }

    Throwable cause = e.getCause();
    if (cause != null) {
        sb.append(indent);
        sb.append("Caused by: ");
        sb.append(getStackTraceString(cause, indent));
    }

    return sb.toString();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X