前言
实际开发中,有多个接个有多个实现类时,搞不清调用栈,可以用这个方法来查看。
实现
实现方式,通过拿到当前线程的所有调用栈信息,再遍历输出即可,虽然简单吧,但是实用呀,有时候一个方法报错了,没有异常调用栈,就比较难受了,加上这个方法,自己打调用栈。
获取方法调用栈方式:
代码语言:javascript复制Thread.currentThread().getStackTrace();
代码比较简单,如下:
代码语言:javascript复制public class Test {
public static void main(String[] args) {
//打印所有调用栈
testInvoke();
}
public static void testInvoke() {
defaultTag();
}
private static String defaultTag() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for (StackTraceElement e : stackTrace) {
System.out.println(e.getClassName() "t"
e.getMethodName() "t行号: " e.getLineNumber());
}
StackTraceElement log = stackTrace[1];
String tag = null;
for (int i = 1; i < stackTrace.length; i ) {
StackTraceElement e = stackTrace[i];
if (!e.getClassName().equals(log.getClassName())) {
tag = e.getClassName() "." e.getMethodName();
break;
}
}
if (tag == null) {
tag = log.getClassName() "." log.getMethodName();
}
System.out.println("当前方法: " tag);
return tag;
}
}
结果
代码语言:javascript复制java.lang.Thread getStackTrace 行号: 1559
Test defaultTag 行号: 17
Test testInvoke 行号: 13
Test main 行号: 8
当前方法: Test.defaultTag