Nous avons analysé l'utilisation de la fonction de la pile d'exception Java via un exemple de code et compilé deux méthodes pour Java pour obtenir des informations de pile d'exception ci-dessous. Ce qui suit est tout le contenu:
(trace de pile) Exception La trace de pile fait référence à:
Lorsque vous lancez le jetable, l'objet jetable lance plusieurs couches d'appel de méthode (pile d'appels de méthode) que le processus (navette) passe. Plus vous vous rapprochez de l'instruction Throw, la méthode entre d'abord dans la pile d'exception.
(Chaîne causale jetable) Exception Cause Chaîne:
La propriété Cause dans la classe jetable représente l'exception originale enveloppée par l'exception actuelle. (Peut être appelé la cause de l'exception)
Lors de l'impression de la piste de pile d'exception, la pile d'exception de l'exception d'origine est imprimée récursivement.
Analyons maintenant la méthode throwable.printStackTrace ().
Inside Throwable.printStackTrace (PrintStreamorWriter S), nous pouvons voir:
Lors de l'impression de la pile d'exception, la pile d'exception de l'objet exceptionnel actuel, il est d'abord imprimé.
Imprimez ensuite la chaîne des causes de l'exception. (Imprime récursivement la pile d'exception de l'exception d'origine)
synchronisé (s.lock ()) {// imprime notre trace de pile // 1. Imprimez d'abord la pile d'exception de l'objet exceptionnel actuel ceci. S.println (ceci); StackTraceElement [] trace = getOrStackTrace (); for (stackTraceElement traceelement: trace) s.println ("/ tat" + traceelement); // imprime les exceptions supprimées, le cas échéant pour (Throwable SE: GetSuprempprimed ()) se.printeClosedStackTrace (s, trace, supprimé_caption, "/ t", dejavu); // Imprimer la cause, le cas échéant // 2. Imprimer Cause OurCause = getCause (); if (ourcause! = null) ourcause.princelosedStackTrace (s, trace, cause_caption, "", dejavu); }Java obtient des informations de pile d'exception
Méthode 1:
String statique publique getStackTrace (Throwable T) {StringWriter SW = new StringWriter (); Printwriter pw = new PrintWriter (SW); essayez {t.printStackTrace (pw); return Sw.ToString (); } enfin {pw.close (); }}Méthode 2:
org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace (e);