ITPub博客

首页 > > > java获取当前方法

java获取当前方法

作者:longmanma 时间:2020-01-06 09:34:23 0 删除 编辑

.获取当前方法堆栈,我们一般用

 StackTraceElement[] stes = Thread.currentThread().getStackTrace();

想要获取当前方法,切记不够灵活,使用数组stes的固定index(网上不少是这样说的,请明辨之)。

让我们来看api怎么说的吧?

getStackTrace

publicStackTraceElement[]getStackTrace()

返回一个表示该线程堆栈转储的堆栈跟踪元素数组。如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该序列中最新的方法调用。最后一个元素代表堆栈底,是该序列中最旧的方法调用。

如果有安全管理器,并且该线程不是当前线程,则通过RuntimePermission("getStackTrace")权限调用安全管理器的checkPermission方法,查看是否可以获取堆栈跟踪。

某些虚拟机在某些情况下可能会从堆栈跟踪中省略一个或多个堆栈帧。在极端情况下,没有该线程堆栈跟踪信息的虚拟机可以从该方法返回一个零长度数组。

返回:

StackTraceElement数组,每个数组代表一个堆栈帧。

抛出:

SecurityException- 如果安全管理器存在,并且其checkPermission方法不允许获取线程的堆栈跟踪。

从以下版本开始:

1.5

另请参见:

SecurityManager.checkPermission(java.security.Permission),RuntimePermission,Throwable.getStackTrace()

注意,红色标注的地方,栈顶是最新的方法调用,栈底是最旧的方法调用

2. 实例:

/*TestDumpThread .java*/publicclass TestDumpThread {

//Dump the current thread stack trace.publicstaticvoid getCurrentStackTrace() {

StackTraceElement[] stes = Thread.currentThread().getStackTrace();

for (StackTraceElement element : stes) {

System.out.println(element);

}

}

publicstaticvoid main(String[] args) {

getCurrentStackTrace();

}

}

结果如下:

java.lang.Thread.getStackTrace(Thread.java:1479)

TestDumpThread.getCurrentStackTrace(TestDumpThread.java:5)

TestDumpThread.main(TestDumpThread.java:12)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2730/viewspace-3154264/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-12-18

  • 博文量
    492
  • 访问量
    11990