Java 9 เปิดตัว StackWalker API เป็นทางเลือกแทน Thread.getStackTrace() หรือ Throwable.getStackTrace() และ SecurityManager.getClassContext() . API นี้ตั้งเป้าไปที่กลไกในการสำรวจและสร้างสแต็กเฟรมที่จำเป็น ช่วยให้เข้าถึงสแต็กเฟรมเพิ่มเติมได้อย่างมีประสิทธิภาพเมื่อจำเป็น
หากเราจำเป็นต้องเข้าถึงแต่ละองค์ประกอบสแต็กของการติดตามสแต็กข้อยกเว้น เราก็สามารถใช้ getStackTrace() วิธีการ ทิ้งได้ ระดับ. ส่งคืน อาร์เรย์ ของ StackTraceElement
ตัวอย่าง
import java.util.*; // Test1 class class Test1 { public void test() throws Exception { Test2 test2 = new Test2(); test2.test(); } } // Test2 class class Test2 { public void test() throws Exception { System.out.println(1/0); } } // Main class public class StackWalkerTest { public static void main(String args[]) { Test1 test1 = new Test1(); try { test1.test(); } catch(Exception e) { Arrays.stream(e.getStackTrace()).forEach(System.out::println); } } }
ผลลัพธ์
Test2.test(StackWalkerTest.java:14) Test1.test(StackWalkerTest.java:7) StackWalkerTest.main(StackWalkerTest.java:23)