如何在 Java 9 中訪問 StackWalker 的每個堆疊元素?


Java 9 引入了 StackWalker API 作為 Thread.getStackTrace()Throwable.getStackTrace() SecurityManager.getClassContext() 的替代方案。此 API 針對遍歷和實現所需堆疊框架的機制,從而允許在需要時高效地延遲訪問更多堆疊框架。

如果我們需要訪問異常堆疊跟蹤的每個堆疊元素,則可以使用 Throwable 類的 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)

更新於:2020 年 3 月 5 日

190 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證資格

開始
廣告