如何在Java 9中显示StackFrame的反射框架?
Java9已使用java.lang.StackWalker 类提供了标准API。此类设计为允许通过延迟访问堆栈帧来提高效率。几个其他选项允许在包含实现和/或反射框架的堆栈跟踪中使用,这对于调试目的很有用。例如,我们在创建时向StackWalker实例添加SHOW_REFLECT_FRAMES 选项,以便也打印反射方法的框架。
在下面的示例中,我们可以显示StackFrame的反射帧
示例
import java.lang.StackWalker.Option;
import java.lang.StackWalker.StackFrame;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.stream.Collectors;
public class ReflectionFrameTest {
public static void main(String args[]) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Method test1Method = Test1.class.getDeclaredMethod("test1", (Class[]) null);
test1Method.invoke(null, (Object[]) null);
}
}
class Test1 {
protected static void test1() {
Test2.test2();
}
}
class Test2 {
protected static void test2() { // show reflection methods
List<StackFrame> stack = StackWalker.getInstance(Option.SHOW_REFLECT_FRAMES).walk((s) -> s.collect(Collectors.toList()));
for(StackFrame frame : stack) {
System.out.println(frame.getClassName() + " " + frame.getLineNumber() + " " + frame.getMethodName());
}
}
}输出结果
Test2 22 test2 Test1 16 test1 jdk.internal.reflect.NativeMethodAccessorImpl -2 invoke0 jdk.internal.reflect.NativeMethodAccessorImpl 62 invoke jdk.internal.reflect.DelegatingMethodAccessorImpl 43 invoke java.lang.reflect.Method 564 invoke ReflectionFrameTest 11 main
热门推荐
10 经典简短的祝酒祝福语
11 女生迟到文案祝福语简短
12 爸爸生日祝福语搞笑简短
13 搬迁水果礼盒祝福语简短
14 业主售楼祝福语简短精辟
15 老姐结婚祝福语简短朴实
16 医院乔迁条幅祝福语简短
17 军校博士毕业祝福语简短
18 生日祝福语小孩诗句简短