java中关于StackTraceElement的使用

实际项目中有时候我们需要知道在执行某个方法时,它之前的调用链咋样的,尤其是涉及到多线程时,我们需要知道某个方法到底有没有被调用,除了常用的打印日志外,还可以使用StackTraceElement,talk is cheap ,show the code.

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
new A().TestA();
}
public void TestInvoke(){
StackTraceElement[] mStacks = Thread.currentThread().getStackTrace();
for(StackTraceElement s: mStacks){
System.out.println("方法名:"+s.getMethodName()+
"类名:"+s.getClassName()+"行数:"+s.getLineNumber()+"文件名:"+s.getFileName()+"----"+s);
}
}

}
class A {
public void TestA(){
new B().TestB();
};

}
class B {
public void TestB(){
new Test().TestInvoke();
};
}

打印如下:是不是很简单:

 有没有感觉到很像一般的异常抛出啊,其实是对的,Exception中的printStackTrace()最终调用的是Throwable中的getOurStackTrace(),返回的也是StackTraceElement数组

原文地址:https://www.cnblogs.com/sharkli/p/5541445.html