Différence entre les e.printStackTrace et du Système.out.println(e)
Probablement une question de newbie, mais tout le monde semble utiliser e.printStackTrace()
, mais j'ai toujours utilisé System.out.println(e)
lors de la manipulation d'exception. Quelle est la différence et pourquoi est - e.printStackTrace()
préférable?
- Essayez-les et vous verrez quelle est la différence. Vous pouvez lire le code pour printStackTrace() ainsi.
Vous devez vous connecter pour publier un commentaire.
Le flux de sortie utilisé n'est pas le même comme l'a souligné @Brian, mais le niveau de détail n'est pas la même chose - vous pouvez essayer avec le simple test ci-dessous. Sortie:
Avec
println
: vous savez seulement ce que l'exception a été levéeAvec
printStackTrace
: vous savez aussi ce qu'il fait (les numéros de ligne + de la pile d'appel)Si vous utilisez
System.out.println
, alors vous êtes sur le dumping vos erreurs à lastdout
, passtderr
.Il est traditionnel pour le vidage des erreurs d'erreur standard, de sorte que vous pouvez filtrer normal succès de la sortie de la sortie d'erreur. C'est une pratique courante pour les utilitaires de ligne de commande et, par conséquent, une bonne idée à suivre.
par exemple
aura des erreurs d'écriture d'un journal, et les résultats à l'autre. En fonction de votre shell/invocation de processus, etc. vous pouvez combiner cette info, de générer des erreurs, réagissent si des erreurs s'y sont jetés etc. Voir ici pour plus d'info.
À l'aide de
printStackTrace()
est une bonne idée puisque vous êtes dumping où l'exception a eu lieu. C'est souvent très précieux pour le suivi des erreurs qui sont inattendu, car il va vous donner un direct (si verbose) pointeur à l'endroit où exactement vous avez couru dans une erreur.yourProgram > ~/fileThatContainsStandardOutput.txt 2> ~/fileThatContainsErrors.txt
System.out.println(e)
est équivalent àSystem.out.println(e.toString())
:System.out
est un PrintStream,PrintStream.println(Object o)
appelsPrintStream.println(o.toString())
.e.toString()
retourne le nom de la classe et de l'exception getLocalizedMessage().e.printStackTrace()
écrit que l'information de Système.err (pas de Système.out) et aussi une trace de la pile, qui est, la chaîne des méthodes qui ont conduit à l'exception. C'est une information utile.J'ai souvent pensé que ce serait bien si il y avait une méthode qui renvoie une Chaîne contenant les informations de sortie par
e.printStackTrace()
. Puisqu'il n'y a pas que vous avez à utilisere.getStackTrace()
et écrire votre propre routine de sortie le tableau résultant de StackTraceElements.e.getStackTrace()
qui renvoie un tableau d'objets. Aussi, printStackTrace accepte unPrintStream
ouPrintWriter
paramètre - de sorte que vous pouvez passer un StringWriter objet ou de toute autre streamer pour extraire les données.System.err.println(e);
==e.getStackTrace()
?toString()
vers stderr. Il n'y a aucune trace de la pile dans cette sortie.e.getStackTrace()
retourne un tableau deStackTraceElement
. C'est tout dans la JavaDoc et facile d'essayer pour vous-même.System.out.println(e)
ne vous donnera pas votre trace de la pile, juste le message d'erreur et le type d'exception, ainsi que d'être affiché sur la sortie standard, par opposition à l'erreur de sortie.Depuis la sortie de
e.printStackTrace();
estSystem.err
et habituellement je sortie de mon appli journal dans un fichier, je vous recommande d'utiliser les deuxSystem.err
etSystem.out
à la sortie des erreurs.De cette façon, vous pouvez voir les erreurs dans le fichier journal (dans le cas où vous en avez une) et dans la console.
package test;
public class Test {
}