`

Java中获取当前函数名

    博客分类:
  • Java
阅读更多

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


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


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

 

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方法中,有这样一句

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

 

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


所以,只要用的是jdk1.5,那么放心的用[2]吧,不会出问题的


Hope it can relax your eyes : )

 bi

  • 大小: 106.1 KB
0
0
分享到:
评论
2 楼 hch1011 2012-03-02  
很好
1 楼 zhangzijun1984 2010-12-27  
谢谢分享

相关推荐

    Java中获取当前函数名、类名、当前类的文件名.doc

    ### Java中获取当前函数名、类名、当前类的文件名 #### 一、引言 在Java开发过程中,有时候我们需要获取当前执行的函数名、类名甚至是类的文件名,这对于日志记录、错误追踪等方面有着重要的作用。本文将详细介绍几...

    java 获取当前函数名的实现代码

    本篇文章将详细介绍如何在Java中实现获取当前函数名的功能,并提供相应的代码示例。 Java不像C++或C#那样提供内置的预处理器宏,如`__FILE__`, `__FUNCTION__`, 或者 `__LINE__`来直接获取这些信息。然而,我们可以...

    java获取某地天气

    Java中可以使用`HttpURLConnection`或第三方库如`Apache HttpClient`、`OkHttp`来实现。这些库允许我们构造GET或POST请求,并设置请求头,如`Accept`(指定接收的数据格式)和`User-Agent`(模拟浏览器)。 2. **...

    Java 计算农历全_java获取农历_java_日历_greens1r_农历_

    // 获取当前日期 System.out.println("农历日期:" + chineseCalendar.getYear() + "年" + chineseCalendar.getMonth() + "月" + chineseCalendar.getDay() + "日"); } } ``` 如果你选择使用"Joda-Time"库,你...

    java 通过jni接口获取当前机器硬盘ID(序列号)

    4. **JNI调用本地函数**:在C/C++的DLL中,需要定义与Java中的`native`方法匹配的函数签名。例如,一个名为`getHardDiskId`的Java方法将在C++中对应一个`JNIEXPORT`修饰的函数。 ```cpp JNIEXPORT jstring JNICALL ...

    获取当前所在城市地址

    在IT行业中,获取当前所在城市地址是一个常见的需求,特别是在开发地理位置相关的应用时。这个功能能够帮助用户自动填充或提供他们的位置信息,例如在导航、天气预报或者本地服务搜索等场景中。以下将详细讲解实现这...

    Java8通过Function获取字段名的步骤

    Java8通过Function获取字段名是指在Java8中使用Function函数式编程来获取Java对象的字段名。这个步骤主要解决了硬编码的问题,效果类似于MyBatis-Plus的LambdaQueryWrapper。 步骤1:使Function获取序列化能力 在...

    Java API函数大全

    `GetCurrentDirectory` 获取当前工作目录的完整路径。这在需要保存或加载文件时非常有用。 **1.17 GetDiskFreeSpace, GetDiskFreeSpaceEx** 这两个函数分别用于获取磁盘的总容量、可用空间等信息。这对于监控存储...

    java获取外网ip

    给定的代码是一个名为 `ExternalIpAddressFetcher` 的类,它的主要职责是从外部服务获取并解析出当前机器的外网 IP 地址。 ##### 1. 类结构及成员变量 - **成员变量**: - `private String externalIpProviderUrl;...

    java函数速查中文版

    7. **相关函数**:可能会列出与当前函数相关的其他函数,以便于对比学习或扩展使用。 在压缩包内的"codepub.com说明.txt"可能是关于获取这份资料的网站或平台的介绍,它可能包含获取更多学习资源的信息。而"源码网....

    Java中通过Class类获取Class对象的方法详解

    "Java中通过Class类获取Class对象的方法详解" Java中获取Class对象是Java基础知识中的一个重要部分,通过Class类可以获取Class对象,Class对象是Java虚拟机在加载类时自动构造的。下面将详细介绍通过Class类获取...

    java中读取目录下指定的文件

    这里我们将详细讲解如何在Java中实现这个功能。 首先,你需要导入Java的`java.io`包,它包含了处理文件和输入/输出流的相关类。在Java中,`File`类是用于表示文件和目录的基本抽象模型。你可以通过传递文件路径给`...

    java常见函数实验

    本实验主要关注Java中的一些常见函数和类的使用,旨在提升对Java语言的理解和编程技巧。以下是实验内容的详细解析: 1. **二维数组的使用**: 二维数组可以视为多个一维数组的集合,常用来存储矩阵或表格数据。在...

    java中汉字得到首字母大写

    ### Java中实现汉字首字母转为大写的技巧与方法 #### 概述 在Java编程中,有时我们需要处理中文字符,并将其转换成特定格式。例如,我们可能希望将一个中文姓名转换成其拼音首字母的大写形式。这种需求在很多场景...

    java_DWR递归函数实现城市的省市县三级联动

    例如,当用户在省的选择框中改变选项时,触发一个事件,通过DWR调用`getChildrenById`函数,传入当前选中的省ID,获取对应的所有城市,然后更新市的选择框。同理,市选择框的变化也会触发类似的过程,获取并更新县的...

    Java获取磁盘大小

    在Java编程语言中,获取磁盘大小涉及到操作系统与文件系统的交互。这个过程通常分为两步:获取磁盘的总容量和获取磁盘的已用空间。以下是对这些知识点的详细阐述: 1. **磁盘总容量获取** Java提供了一个名为`java...

    java源码包---java 源码 大量 实例

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    current-func-info.vim:获取当前函数名称

    例如,你可以设置statusline为"%f%m%r%h%w[%{current_func_info()}]", 这样当光标移动到不同函数时,状态行会自动更新显示当前函数名。 总的来说,current-func-info.vim插件通过Vimscript增强了Vim的功能,提高了...

    java script js 函数大全

    - 使用 `.selectedIndex` 获取当前选定的索引。 - 示例:获取名为 "selectName" 的下拉列表的选定值。 ```javascript var value = document.forms[0].selectName.options[document.forms[0].selectName....

Global site tag (gtag.js) - Google Analytics