Thread.currentThread().getStackTrace()的作用

Thread.currentThread().getStackTrace()的作用

一、简介

getStackTrace()返回一个表示该线程堆栈转储的堆栈跟踪元素数组。如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该序列中最新的方法调用。最后一个元素代表堆栈底,是该序列中最旧的方法调用。getStackTrace()[0]表示的事getStackTrace方法。意思就是当我们利用这个我们可以获取到我们方法调用的情况。例如在methodA ->methhodB->methhodC,getStackTrace()可以获取我们整个的调用链利用数组保存。

二、示例

我们可以验证一下看看获取的具体的数据是什么。我们先创建一个小的demo,
目前我们是methodA -> methodB->getStackTrace


import java.lang.reflect.Method;

public class StackTraceDemo {


  public static void main(String[] args) {
    methodA();
  }

  public static void methodA() {
    methodB();
  }


  public static void methodB() {
    StackTraceElement[] stackTrace = getStackTrace();
    for (StackTraceElement stackTraceElement : stackTrace) {
      System.out.println(stackTraceElement);
    }
  }

  public static void methodC() {

  }

  public static void methodD() {

  }

  public static StackTraceElement[] getStackTrace() {
     return Thread.currentThread().getStackTrace();

  }

}

我们可以看下结果,结果

java.lang.Thread.getStackTrace(Thread.java:1559)
com.zeng.spring.StackTraceDemo.getStackTrace(StackTraceDemo.java:33)
com.zeng.spring.StackTraceDemo.methodB(StackTraceDemo.java:18)
com.zeng.spring.StackTraceDemo.methodA(StackTraceDemo.java:13)
com.zeng.spring.StackTraceDemo.main(StackTraceDemo.java:9)

可以看到其实这就是整个方法的调用链。方法的调用涉及出栈入栈,返回的数组的顺序其实也就是方法出栈的顺序。

三、可以有什么用呢?

getStackTrace返回的StackTraceElement可以获取方法名称、方法所在类等信息。stackTrace[2]获取的是com.zeng.spring.StackTraceDemo.methodB(StackTraceDemo.java:18)
这个StackTraceElement:

 public static void methodB() {
    StackTraceElement[] stackTrace = getStackTrace();
    StackTraceElement stackTraceElement = stackTrace[2];
    System.out.println("类className"+stackTraceElement.getClassName());
    System.out.println("方法名称MethodName"+stackTraceElement.getMethodName());
    System.out.println("文件名file"+stackTraceElement.getFileName());
    System.out.println("方法所在的行号"+stackTraceElement.getLineNumber());
  }

可以看看下方的结果,我们最终获取到了具体的方法信息了。

类className  :  com.zeng.spring.StackTraceDemo
方法名称MethodName  :  methodB
文件名file  :  StackTraceDemo.java
方法所在的行号  :  18
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久★伴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值