لقد قمنا بتحليل استخدام وظيفة مكدس استثناء Java من خلال رمز المثال وقمنا بتجميع طريقتين لـ Java للحصول على معلومات مكدس الاستثناء أدناه. ما يلي هو كل المحتوى:
(تتبع المكدس) يشير تتبع المكدس إلى:
عند رمي رمي ، يلقي الكائن القابل للتسمية طبقات استدعاء طريقة متعددة (مكدس استدعاء الطريقة) التي تمر بها العملية (المكوك). كلما اقتربت من بيان الرمي ، تدخل الطريقة أولاً إلى مكدس الاستثناء.
(سلسلة السببية القابلة للتسمية) استثناء سلسلة السبب:
تمثل خاصية السبب في فئة الرمي الاستثناء الأصلي ملفوفًا بالاستثناء الحالي. (يمكن أن يسمى سبب الاستثناء)
عند طباعة مسار مكدس الاستثناء ، تتم طباعة مكدس الاستثناء من الاستثناء الأصلي بشكل متكرر.
الآن دعنا نحلل طريقة throwable.printstacktrace ().
داخل throw.printstacktrace (printstreamorwriter s) ، يمكننا أن نرى:
عند طباعة مكدس الاستثناء ، يتم طباعة مكدس الاستثناء لكائن الاستثناء الحالي أولاً.
ثم طباعة سلسلة أسباب الاستثناء. (يطبع بشكل متكرر كومة الاستثناء من الاستثناء الأصلي)
Synchronized (s.lock ()) {// print stack trace // 1. قم أولاً بطباعة كومة الاستثناء من كائن الاستثناء الحالي هذا. S.Println (هذا) ؛ StackTraceElement [] trace = getourstacktrace () ؛ لـ (TackTraceElement TraceElement: Trace) S.Println ("/tat" + traceElement) ؛ // استثناءات مثبتة على طباعة ، إن وجدت من أجل (رمي SE: GetSupressed ()) se.printenclosedStackTrace (S ، Trace ، Courted_caption ، "/t" ، dejavu) ؛ // سبب الطباعة ، إن وجدت // 2. print cause ourcause = getCause () ؛ if (ourCause! = null) ourcause.printenclosedStackTrace (s ، trace ، cause_caption ، "" ، dejavu) ؛ }جافا تحصل على معلومات مكدس الاستثناء
الطريقة 1:
السلسلة الثابتة العامة getStackTrace (رمي t) {StringWriter SW = new StringWriter () ؛ printWriter PW = New PrintWriter (SW) ؛ حاول {t.printstacktrace (pw) ؛ إرجاع sw.tostring () ؛ } أخيرًا {pw.close () ؛ }}الطريقة 2:
org.apache.commons.lang3.Exception.ExceptionUtils.getStackTrace (e) ؛