通过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
- 通过StackTraceElement获取方法调用者的具体信息
- 通过StackTraceElement获取方法调用者的具体信息
- StackTraceElement获取方法调用栈的信息
- 通过Hibernate配置获取数据库表的具体信息
- 通过Hibernate配置获取数据库表的具体信息
- 通过silktest调用c#写的工具获取dll文件信息的方法
- 通过函数调用,获取字符串的方法
- JDBC中通过MetaData来获取具体的表的相关信息
- 获取元素的具体样式信息getcss
- android 通过经纬度获取具体的地理信息
- Python 通过调用接口获取公交信息
- Thread类的getAllStackTraces()方法获取虚拟机中所有线程的StackTraceElement对象,可以查看堆栈
- 通过基站信息(LAC,CID)调用google的json接口获取地理位置信息的Java代码
- js获取FCK编辑器信息/取值/赋值具体方法
- .NET通过调用接口来获取数据的方法
- PHP调用OCX控件的具体方法
- PHP调用OCX控件的具体方法
- android 调用webService的具体方法
- Repository模式中,Update和Delete总是失败及其解析(报错“another entity of the same type already has the same primar”)
- AFNetworking
- android死机LOG记录
- CSDN-markdown编辑器使用指南
- 开源库实现字体闪烁功能
- 通过StackTraceElement获取方法调用者的具体信息
- 关于maven pom.xml中dependency type 为pom的应用
- android radiobutton 改变TextColor
- JS代码头像上传地址优化之6=2 和 代码扩展
- 关于java中Double类型的运算精度问题
- GdiplusStartup函数
- 安装SAP Solution Manager 7.1 on Suse Linux 2
- 第一次写博客
- 第三方汇总