【Java】获取当前方法的方法名

有的时候需要知道当前执行的方法的方法名, 方法如下:

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();

据说是有优化,大概吧。。。

你可能感兴趣的:(java)