有的时候需要知道当前执行的方法的方法名, 方法如下:
String method = Thread.currentThread().getStackTrace()[1].getMethodName();
ps:本人将CSDN的博客地址挂在了简历上,真的有面试官来看博客,然后拿其中的内容来提问,其中这一篇就被问到了,所以又做了相关的补充。
在 getStackTrace() 方法中,其实是获取到线程的堆栈,里面存放了一个堆栈元素的数组,每一个元素都是调用的方法元素的一些简单描述,如是在哪个类中声明的方法,此方法的方法名,在哪个文件中和在类中的行号四个基本信息,并且重写了 toString() 方法,方便阅读。这个堆栈中,数组的第一个元素都是 getStackTrace() 方法,然后是依次的调用信息。
下面是最简单的示意
public class Main {
public static void main(String[] args) {
a();
}
public static void a() {
b();
}
public static void b() {
c();
}
public static void c() {
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
for (int i = 0; i < elements.length; i++) {
StackTraceElement element = elements[i];
System.out.println(i + " => " + element.toString());
}
}
}
输出的结果是:
0 => java.lang.Thread.getStackTrace(Thread.java:1552)
1 => Main.c(Main.java:21)
2 => Main.b(Main.java:17)
3 => Main.a(Main.java:13)
4 => Main.main(Main.java:9)
在查询其他的资料时发现一个优化的方法:
String method = new Throwable().getStackTrace()[1].getMethodName();
据说是有优化,大概吧。。。