Java中获取当前函数名
Java中獲取當前函數名
- 博客分類:
- Java
有時候我們需要在程序中獲取當前運行的函數名,如何簡單的做到這點呢?我們可以用getStackTrace輕松搞定。
一提到getStatckTrace多數人會聯想到Thowable中的getStackTrace方法。的確,也正是發現StackTraceElement中有getMethod方法,使我找到了此問題的突破口。
在Java JDK 5中,有三個類擁有getStackTrace方法,分別是ThreadInfo, Thread和Throwable。此處,我們用Thread.currentThread()中的StackTraceElement來獲取當前函數名。具體代碼如下:
?
Java代碼 ??
有人會問,為啥是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方法中,有這樣一句
?
原來是getStackTrace里面又調用了dumpThreads方法, 又因為dumpThreads是個native方法。因此,把dumpThreads作為了StackTrace中第一個element。
所以,只要用的是jdk1.5,那么放心的用[2]吧,不會出問題的
總結
以上是生活随笔為你收集整理的Java中获取当前函数名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实时多线程系统的日志实现
- 下一篇: 学习Java: Queue