通过StackTraceElement获取方法调用者的具体信息

来源:互联网 发布:上烈士墙的淘宝排行榜 编辑:程序博客网 时间:2024/06/05 18:00

本文简要介绍了StackTrace(堆栈轨迹)以及StackTraceElement的一些用法


一、什么是StackTrace

StackTrace(堆栈轨迹)可以认为是一系列方法调用过程的集合。

异常处理中常用的printStackTrace()即为打印异常调用的堆栈信息。

二、StackTraceElement介绍

StackTraceElement表示StackTrace(堆栈轨迹)中的一个元素,属性包括方法调用者的类名、方法名、文件名以及调用的行数。

public final class StackTraceElement implements java.io.Serializable {    // Normally initialized by VM (public constructor added in 1.5)    private String declaringClass;    private String methodName;    private String fileName;    private int    lineNumber;

StackTraceElement被定义为final,可见其作为一个java的基础类不允许被继承。

获取StackTraceElement的方法有两种,均返回StackTraceElement数组

1、Thread.currentThread().getStackTrace()
2、new Throwable().getStackTrace()

StackTraceElement数组包含了StackTrace(堆栈轨迹)的内容,通过遍历它可以得到方法间的调用过程,

即可以得到当前方法以及其调用者的方法名、调用行数等信息

public class TestClass{      public static void main(String[] args)      {        new TestClass().methodA();    }    private void methodA(){        System.out.println("------进入methodA----------");        methodB();    }    private void methodB(){        System.out.println("------进入methodB----------");        StackTraceElement elements[] = Thread.currentThread().getStackTrace();        for (int i = 0; i < elements.length; i++) {            StackTraceElement stackTraceElement=elements[i];            String className=stackTraceElement.getClassName();            String methodName=stackTraceElement.getMethodName();            String fileName=stackTraceElement.getFileName();            int lineNumber=stackTraceElement.getLineNumber();            System.out.println("StackTraceElement数组下标 i="+i+",fileName="                    +fileName+",className="+className+",methodName="+methodName+",lineNumber="+lineNumber);        }    }}
执行main方法,输出信息如下


可以看到在方法B中使用getStackTrace,

得到StackTraceElement数组中下标为2的element表示方法B的调用者方法A的详细信息


1 0
原创粉丝点击