您的位置:首页 > 编程语言 > Java开发

Java中获取当前函数名

2012-12-01 16:24 169 查看

Java中获取当前函数名

博客分类:
Java

JavathreadJDKIDEA

有时候我们需要在程序中获取当前运行的函数名,如何简单的做到这点呢?我们可以用getStackTrace轻松搞定。

一提到getStatckTrace多数人会联想到Thowable中的getStackTrace方法。的确,也正是发现StackTraceElement中有getMethod方法,使我找到了此问题的突破口。

在Java JDK 5中,有三个类拥有getStackTrace方法,分别是ThreadInfo, Thread和Throwable。此处,我们用Thread.currentThread()中的StackTraceElement来获取当前函数名。具体代码如下:

Java代码







Thread.currentThread().getStackTrace()[2].getMethodName();

Thread.currentThread().getStackTrace()[2].getMethodName();


有人会问,为啥是2呢?如何肯定返回的StackTraceElement数组中第二个元素即是当前运行的函数。

首先,我们看下jdk里是如何解释Thread.getStackTrace方法的。

Returns an array of stack trace elements representing the stack dump of this thread.This method will return a zero-length array if this thread has not started or has terminated.

也就是执行过的程序都会以stack dump的形式展现。根据dubug数据我们推断, 它的顺序应该是:

0->dumpThreads

1->getStackTrace

2->Current

...

...

n->main(主线程)/ 某线程起始的方法

getStackTrace的存在不难理解,因为实际上我们调用的就是getStackTrace方法,那么dumpThreads从何而来呢?

查了java源代码,原来在Thread的getStackTrace方法中,有这样一句

Java代码







return dumpThreads(new Thread[] {this})[0];

return dumpThreads(new Thread[] {this})[0];


原来是getStackTrace里面又调用了dumpThreads方法, 又因为dumpThreads是个native方法。因此,把dumpThreads作为了StackTrace中第一个element。

所以,只要用的是jdk1.5,那么放心的用[2]吧,不会出问题的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: