Computer >> Máy Tính >  >> Lập trình >> Java

Làm cách nào để truy cập từng phần tử ngăn xếp của StackWalker trong Java 9?


Java 9 đã giới thiệu StackWalker API thay thế cho Thread.getStackTrace () hoặc Throwable.getStackTrace () SecurityManager.getClassContext () . API này nhắm mục tiêu một cơ chế để đi qua và hiện thực hóa các khung ngăn xếp được yêu cầu cho phép truy cập lười hiệu quả vào các khung ngăn xếp bổ sung khi được yêu cầu.

Nếu chúng ta cần truy cập từng phần tử ngăn xếp của dấu vết ngăn xếp ngoại lệ, thì chúng ta có thể sử dụng getStackTrace () phương pháp Có thể ném lớp. Nó trả về một mảng của StackTraceElement.

Ví dụ

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);
      }
   }
}

Đầu ra

Test2.test(StackWalkerTest.java:14)
Test1.test(StackWalkerTest.java:7)
StackWalkerTest.main(StackWalkerTest.java:23)