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]吧,不会出问题的
相关文章推荐
- java 获取当前函数名
- JAVA和C++中获取当前函数名,文件名和代码行
- Java 在函数中获取当前函数的函数名
- JAVA 获取当前执行的函数名、当前运行的类名等等信息
- JavaScript 比较两个日期大小 及格式化时间函数 java获取当前日期前几天或后几天
- java中获取当前被调用函数的函数路径(stack trace)
- JAVA 获取当前执行的函数名、当前运行的类名等等信息
- JAVA 获取当前的函数名,当前运行的类名
- java 获取当前函数名
- java 获取当前函数名的实现代码
- JAVA 获取当前执行的函数名、当前运行的类名等等信息
- java中获取当前函数名
- java 获取当前函数名的实现代码
- 获取当前日期 java
- JAVA中获取当前执行路径
- java获取当前日期是星期几
- Java各种获取系统当前时间方法和格式
- java中获取当前是星期几
- 运行时如何获取运行当前代码所在的函数,一个神奇的宏
- 今天晚上写了个获取当前Office版本的函数(原创!)