Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 9에서 StackWalker의 각 스택 요소에 액세스하는 방법은 무엇입니까?


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)