Java 获取方法名

编写程序时难免要打印一些日志信息,有时想要在输出的日志信息中加上方法名,这时调用
Thread.currentThread( ).getStackTrace( )[index].getMethodName( )
就可以轻松的解决这个问题。

Thred.currentThread( )
  • 该方法返回值类型为 Thread,返回的是一个指向「当前正在执行的线程对象」的引用。
getStackTrace( )
  • 该方法返回值类型为 StackTraceElement[ ] ,如果此线程尚未启动,或者已启动但尚未由系统运行,或者已经终止,此方法将返回一个零长度的数组。
StackTraceElement [ ]

通过调用相应的 StackTraceElement 对象的 getMethodName( ) 方法就能得到对应的方法名。此处需要指出的是所返回 StackTraceElement [ ] 数组的长度取决于线程的堆栈情况,而 StackTraceElement [0] ~ StackTraceElement [length-1] 反映的是方法嵌套调用的情况。

请看以下代码:

public class GetMethodNameDemo {

    public static void main(String[] args) {
        three();
    }

    private static void three() {
        two();
    }

    private static void two() {
        one();
    }

    private static void one() {
        zero();
    }

    private static void zero() {

        StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();

        for (int i = 0; i < stackTraceElements.length; i++) {
            System.out.println("invoke stackTraceElement[" + i + "].getMethodName() return : "
                + stackTraceElements[i].getMethodName());
        }
    }
}

代码运行结果如下:

invoke stackTraceElement[0].getMethodName() return : getStackTrace
invoke stackTraceElement[1].getMethodName() return : zero
invoke stackTraceElement[2].getMethodName() return : one
invoke stackTraceElement[3].getMethodName() return : two
invoke stackTraceElement[4].getMethodName() return : three
invoke stackTraceElement[5].getMethodName() return : main

  • stackTraceElement[0].getMethodName() 返回的始终是 getStackTrack
  • stackTraceElement[1].getMethodName() 返回的始终是此行代码所在的方法名
  • stackTraceElement[2].getMethodName() 返回的始终是调用此行代码所在方法的方法

以此类推,stackTraceElement[length-1].getMethodName() 返回的便是嵌套在最外层的方法。

总结

到此,我们就可以根据自己的需求写一个简单的工具类用以获取方法名。

例如:

public class Util {

    public static void getCurrentMethodName() {
        System.out.println(Thread.currentThread().getStackTrace()[2].getMethodName());
    }
}

这样就可以通过调用 Util.getCurrentMethodName() 获取

Util.getCurrentMethodName();

这一行代码所在方法的方法名了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值