เราได้วิเคราะห์การใช้ฟังก์ชันของ Java Exception Stack ผ่านตัวอย่างโค้ดและรวบรวมสองวิธีสำหรับ Java เพื่อรับข้อมูลสแต็กข้อยกเว้นด้านล่าง ต่อไปนี้เป็นเนื้อหาทั้งหมด:
(สแต็กร่องรอย) การติดตามสแต็กหมายถึง:
เมื่อโยนทิ้งได้วัตถุที่โยนได้จะโยนเลเยอร์การโทรหลายวิธี (วิธีการเรียกใช้เมธอด) ว่ากระบวนการ (กระสวย) ต้องผ่าน ยิ่งคุณเข้าใกล้คำสั่งการโยนมากขึ้นวิธีแรกจะเข้าสู่สแต็คข้อยกเว้น
(โซ่เชิงสาเหตุแบบโยนได้) ข้อยกเว้นสาเหตุโซ่:
คุณสมบัติสาเหตุในชั้นเรียนที่โยนได้แสดงถึงข้อยกเว้นดั้งเดิมที่ห่อหุ้มด้วยข้อยกเว้นปัจจุบัน (สามารถเรียกได้ว่าเป็นสาเหตุของข้อยกเว้น)
เมื่อพิมพ์แทร็กสแต็กข้อยกเว้นสแต็กข้อยกเว้นของข้อยกเว้นเดิมจะถูกพิมพ์ซ้ำ
ตอนนี้มาวิเคราะห์วิธีการที่สามารถโยนได้ PrintStackTrace ()
Inside throwable.printstacktrace (printstreamorwriter s) เราจะเห็น:
เมื่อพิมพ์สแต็กข้อยกเว้นสแต็กข้อยกเว้นของวัตถุข้อยกเว้นปัจจุบันจะถูกพิมพ์ครั้งแรก
จากนั้นพิมพ์โซ่ของสาเหตุของข้อยกเว้น (พิมพ์สแต็คข้อยกเว้นซ้ำ ๆ ของข้อยกเว้นเดิม)
ซิงโครไนซ์ (s.lock ()) {// พิมพ์การติดตามสแต็กของเรา // 1 พิมพ์ครั้งแรกสแต็กข้อยกเว้นของวัตถุข้อยกเว้นปัจจุบันนี้ s.println (นี่); stacktraceElement [] trace = getourstacktrace (); สำหรับ (stacktraceelement tracelement: trace) s.println ("/tat" + tracelement); // พิมพ์ข้อยกเว้นที่ถูกระงับหากมี (se ที่โยนได้: getSuppressed ()) se.printenclosedstacktrace (s, trace, suppressed_caption, "/t", dejavu); // พิมพ์สาเหตุถ้ามี // 2. การพิมพ์ทำให้เราเป็นสาเหตุของเรา = getCause (); ถ้า (Ourcause! = null) Ourcause.printenclosedstacktrace (s, trace, cause_caption, "", dejavu); -Java ได้รับข้อมูลสแต็กข้อยกเว้น
วิธีที่ 1:
สตริงคงที่สาธารณะ getStackTrace (throwable t) {StringWriter sw = new StringWriter (); PrintWriter PW = New PrintWriter (SW); ลอง {T.PrintStackTrace (PW); กลับ sw.tostring (); } ในที่สุด {pw.close (); -วิธีที่ 2:
org.apache.Commons.lang3.exception.exceptionUts.getStackTrace (E);