Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

จะเข้าถึงแต่ละองค์ประกอบสแต็กของ StackWalker ใน Java 9 ได้อย่างไร


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)