getStackTrace()方法使用
参考文章:https://blog.csdn.net/lovequanquqn/article/details/81585991
StackTrace(堆栈轨迹)存放的就是方法调用栈的信息,每次调用一个方法会产生一个方法栈,当前方法调用另外一个方法时会使用栈将当前方法的现场信息保存在此方法栈当中,获取这个栈就可以得到方法调用的详细过程。例如:异常处理中常用的e.printStackTrace()实质就是打印异常调用的堆栈信息。
获取StackTraceElement(StackTraceElement是StackTrace(堆栈轨迹)中的一个方法对象)的方法有两种,均返回StackTraceElement数组,也就是这个栈的信息:
getStackTrace()方法
//获取到堆栈轨迹的两种方法 Thread.currentThread().getStackTrace() new Throwable().getStackTrace()
分别进行实际验证一下:
public static void main(String[] args) { add(); testStackTraceElements(); testThrowNewElement(); } public static void add() { System.out.println("准备测试"); } public static void testStackTraceElements() { System.out.println("-----------------"); StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); for (int i = 0; i < stackTraceElements.length; i++) { System.out.println(stackTraceElements[i]); } } public static void testThrowNewElement() { System.out.println("----------------------"); StackTraceElement[] testThrows = new Throwable().getStackTrace(); for (int i = 0; i < testThrows.length; i++) { System.out.println(testThrows[i].getClassName()); System.out.println(testThrows[i].getFileName()); System.out.println(testThrows[i].getLineNumber()); System.out.println(testThrows[i].getMethodName()); } }
可以看到每一个StackTraceElement元素都有获取类名、文件名、所在行数及方法名具体的get方法。
结果如下,【在日志中,getStackTrace()方法还是比较常用的。】