如何在Java 9中访问StackWalker的每个堆栈元素?

如何在Java 9中访问StackWalker的每个堆栈元素?

Java 9 引入了 StackWalker API 作为 Thread.getStackTrace()Throwable 的替代方案.getStackTrace() SecurityManager.getClassContext()。此 API 的目标是一种遍历和具体化所需堆栈帧的机制,允许在需要时有效地延迟访问其他堆栈帧。

如果我们需要访问异常堆栈跟踪的每个堆栈元素,那么我们可以使用Throwable类的getStackTrace()方法。它返回 StackTraceElement 的数组

示例

import java.util.*;

<strong>// Test1 class
</strong>class Test1 {
   public void test() throws Exception {
      Test2 test2 = new Test2();
      test2.test();
   }
}

<strong>// Test2 class</strong>
class Test2 {
   public void test() throws Exception {
      System.out.println(1/0);
   }
}

<strong>// Main class</strong>
public class StackWalkerTest {
   public static void main(String args[]) {
      Test1 test1 = new Test1();
      try {
         test1.test();
      } catch(Exception e) {
         <strong>Arrays.stream</strong>(e.<strong>getStackTrace()</strong>).<strong>forEach</strong>(System.out::println);
      }
   }
}

输出

<strong>Test2.test(StackWalkerTest.java:14)
Test1.test(StackWalkerTest.java:7)
StackWalkerTest.main(StackWalkerTest.java:23)</strong>

以上就是如何在Java 9中访问StackWalker的每个堆栈元素?的详细内容,更多请关注其它相关文章!