程序跑偏了,无法解释,但我不信
public class Temp {
public static void f() {
System.out.println(new Throwable().getStackTrace()[1].getMethodName());
}
public static void main(String[] args) throws Exception {
Temp.f();
}
}
按道理应该是输出 main 的,单独测试也是这样的,但生产环境的程序不是这样的简单,在f()的实现中是有一些别的调用的。。。
但它打印出来的居然是f这个名字,后面因为这个名字不对就抛出异常了,我的疑问是为什么会打印出f呢,什么情况下会打印出f呢?考虑下我的程序并不是上面的这样的简单,但逻辑是这样的,就是在main中调用一个函数,然后在这个函数中通过new Trhowable的方式来取到调用该函数的函数名。