有时候我们需要在程序中获取当前运行的函数名,如何简单的做到这点呢?我们可以用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 : )


- 大小: 106.1 KB
分享到:
相关推荐
### Java中获取当前函数名、类名、当前类的文件名 #### 一、引言 在Java开发过程中,有时候我们需要获取当前执行的函数名、类名甚至是类的文件名,这对于日志记录、错误追踪等方面有着重要的作用。本文将详细介绍几...
本篇文章将详细介绍如何在Java中实现获取当前函数名的功能,并提供相应的代码示例。 Java不像C++或C#那样提供内置的预处理器宏,如`__FILE__`, `__FUNCTION__`, 或者 `__LINE__`来直接获取这些信息。然而,我们可以...
Java中可以使用`HttpURLConnection`或第三方库如`Apache HttpClient`、`OkHttp`来实现。这些库允许我们构造GET或POST请求,并设置请求头,如`Accept`(指定接收的数据格式)和`User-Agent`(模拟浏览器)。 2. **...
// 获取当前日期 System.out.println("农历日期:" + chineseCalendar.getYear() + "年" + chineseCalendar.getMonth() + "月" + chineseCalendar.getDay() + "日"); } } ``` 如果你选择使用"Joda-Time"库,你...
4. **JNI调用本地函数**:在C/C++的DLL中,需要定义与Java中的`native`方法匹配的函数签名。例如,一个名为`getHardDiskId`的Java方法将在C++中对应一个`JNIEXPORT`修饰的函数。 ```cpp JNIEXPORT jstring JNICALL ...
在IT行业中,获取当前所在城市地址是一个常见的需求,特别是在开发地理位置相关的应用时。这个功能能够帮助用户自动填充或提供他们的位置信息,例如在导航、天气预报或者本地服务搜索等场景中。以下将详细讲解实现这...
Java8通过Function获取字段名是指在Java8中使用Function函数式编程来获取Java对象的字段名。这个步骤主要解决了硬编码的问题,效果类似于MyBatis-Plus的LambdaQueryWrapper。 步骤1:使Function获取序列化能力 在...
`GetCurrentDirectory` 获取当前工作目录的完整路径。这在需要保存或加载文件时非常有用。 **1.17 GetDiskFreeSpace, GetDiskFreeSpaceEx** 这两个函数分别用于获取磁盘的总容量、可用空间等信息。这对于监控存储...
给定的代码是一个名为 `ExternalIpAddressFetcher` 的类,它的主要职责是从外部服务获取并解析出当前机器的外网 IP 地址。 ##### 1. 类结构及成员变量 - **成员变量**: - `private String externalIpProviderUrl;...
7. **相关函数**:可能会列出与当前函数相关的其他函数,以便于对比学习或扩展使用。 在压缩包内的"codepub.com说明.txt"可能是关于获取这份资料的网站或平台的介绍,它可能包含获取更多学习资源的信息。而"源码网....
"Java中通过Class类获取Class对象的方法详解" Java中获取Class对象是Java基础知识中的一个重要部分,通过Class类可以获取Class对象,Class对象是Java虚拟机在加载类时自动构造的。下面将详细介绍通过Class类获取...
这里我们将详细讲解如何在Java中实现这个功能。 首先,你需要导入Java的`java.io`包,它包含了处理文件和输入/输出流的相关类。在Java中,`File`类是用于表示文件和目录的基本抽象模型。你可以通过传递文件路径给`...
本实验主要关注Java中的一些常见函数和类的使用,旨在提升对Java语言的理解和编程技巧。以下是实验内容的详细解析: 1. **二维数组的使用**: 二维数组可以视为多个一维数组的集合,常用来存储矩阵或表格数据。在...
### Java中实现汉字首字母转为大写的技巧与方法 #### 概述 在Java编程中,有时我们需要处理中文字符,并将其转换成特定格式。例如,我们可能希望将一个中文姓名转换成其拼音首字母的大写形式。这种需求在很多场景...
例如,当用户在省的选择框中改变选项时,触发一个事件,通过DWR调用`getChildrenById`函数,传入当前选中的省ID,获取对应的所有城市,然后更新市的选择框。同理,市选择框的变化也会触发类似的过程,获取并更新县的...
在Java编程语言中,获取磁盘大小涉及到操作系统与文件系统的交互。这个过程通常分为两步:获取磁盘的总容量和获取磁盘的已用空间。以下是对这些知识点的详细阐述: 1. **磁盘总容量获取** Java提供了一个名为`java...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....
例如,你可以设置statusline为"%f%m%r%h%w[%{current_func_info()}]", 这样当光标移动到不同函数时,状态行会自动更新显示当前函数名。 总的来说,current-func-info.vim插件通过Vimscript增强了Vim的功能,提高了...
- 使用 `.selectedIndex` 获取当前选定的索引。 - 示例:获取名为 "selectName" 的下拉列表的选定值。 ```javascript var value = document.forms[0].selectName.options[document.forms[0].selectName....