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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值