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)