这是代码:
package stacktrace.test;
public class A {
public static void main(String[] args) {
B.f();
}
}
interface B {
static void f() {
C.f();
}
}
interface C {
static void f() {
StackTraceElement[] stackTrace1 = (new Exception()).getStackTrace();
StackTraceElement[] stackTrace2 = Thread.currentThread().getStackTrace();
StackTraceElement x1 = stackTrace1[1];
StackTraceElement x2 = stackTrace2[1];
System.out.println(x1.getClassName());
System.out.println(x2.getClassName());
}
}
并输出:
stacktrace.test.B
stacktrace.test.C
我检查Thread.currentThread().getStackTrace()
它的调用(new Exception()).getStackTrace();
。在这种情况下,为什么我得到不同的结果?
提前致谢!
正如您已经正确注意到的那样,Thread.currentThread().getStackTrace()
调用(new Exception()).getStackTrace();
意味着前者的堆栈跟踪将恰好长一帧。
如果一个方法调用另一个,则其堆栈跟踪在定义上就不可能相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句