前言
实际开发中,有多个接个有多个实现类时,搞不清调用栈,可以用这个方法来查看。
实现
实现方式,通过拿到当前线程的所有调用栈信息,再遍历输出即可,虽然简单吧,但是实用呀,有时候一个方法报错了,没有异常调用栈,就比较难受了,加上这个方法,自己打调用栈。
获取方法调用栈方式:
1
| Thread.currentThread().getStackTrace();
|
代码比较简单,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| 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; }
}
|
结果
1 2 3 4 5
| java.lang.Thread getStackTrace 行号: 1559 Test defaultTag 行号: 17 Test testInvoke 行号: 13 Test main 行号: 8 当前方法: Test.defaultTag
|