StackTraceElement的简单使用
来源:互联网 发布:linux查看samba服务 编辑:程序博客网 时间:2024/05/16 10:04
一、什么是StackTraceElement
StackTraceElement e(堆栈轨迹)存放的就是方法调用栈的信息,异常处理中常用的printStackTrace()实质就是打印异常调用的堆栈信息。
二、StackTraceElement的简单使用
public class StackTraceElementTest {public static void main(String[] args) {StackTraceElement[] stackElement = Thread.currentThread().getStackTrace();int q = 0;for(int i = 0;i<stackElement.length;i++){ System.out.println("---- the " + i + " element ----"); System.out.println("toString: " + stackElement[i].toString()); System.out.println("ClassName: " + stackElement[i].getClassName()); System.out.println("FileName: " + stackElement[i].getFileName()); System.out.println("LineNumber: " + stackElement[i].getLineNumber()); System.out.println("MethodName: " + stackElement[i].getMethodName());}}}运行结果如下:
---- the 0 element ----toString: java.lang.Thread.getStackTrace(Thread.java:1589)ClassName: java.lang.ThreadFileName: Thread.javaLineNumber: 1589MethodName: getStackTrace---- the 1 element ----toString: com.hxfxy.stackTraceElementTest.StackTraceElementTest.main(StackTraceElementTest.java:8)ClassName: com.hxfxy.stackTraceElementTest.StackTraceElementTestFileName: StackTraceElementTest.javaLineNumber: 8MethodName: main
二、StackTraceElement介绍
StackTraceElement表示StackTrace(堆栈轨迹)中的一个方法对象,属性包括方法的类名、方法名、文件名以及调用的行数。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
StackTraceElement被定义为final,可见其作为一个Java的基础类不允许被继承。
获取StackTraceElement的方法有两种,均返回StackTraceElement数组,也就是这个栈的信息。
1、Thread.currentThread().getStackTrace()
2、new Throwable().getStackTrace()
StackTraceElement数组包含了StackTrace(堆栈轨迹)的内容,通过遍历它可以得到方法间的调用过程,即可以得到当前方法以及其调用者的方法名、调用行数等信息
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
三、用途
1、我们可以封装一个日志库,在打印目标日志的时候,也可以通过这个调用栈打印出这个日志所在的行数,这样就可以迅速的定位到日志输出行,再也不要全局搜索去查找了。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2、如果我们写了一个SDK,希望某个方法在固定的位置被调用,我们也可以在这个方法被调用的时候,进行检查,看这个方法的调用位置是否正确。
例如,必须在Activity.onResume中执行,PVSdk.onResume,所以我们在调用PVSdk.onResume方法的时候,在PVSdk.onResume方法里面来通过获取调用栈的信息检测这个方法是否在Activity的onResume方法中调用的。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
3、我们在进行源码分析的时候,如果想分析整个代码的执行流程,我们可以进行通过打印栈的信息来获取,这个在源码分析的时候还是挺有用的
- StackTraceElement的简单使用
- android StackTraceElement的一些用法
- Android——使用StackTraceElement实现自己的Log日志输出管理类
- StackTrace简述以及StackTraceElement使用实例
- StackTraceElement获取方法调用栈的信息
- 【Java】 StackTraceElement的getLineNumber方法返回-1问题
- 通过StackTraceElement获取方法调用者的具体信息
- Android——StackTraceElement线程运行栈的探索
- 通过StackTraceElement获取方法调用者的具体信息
- Java StackTraceElement
- StackTraceElement用法
- J2SE基础夯实系列之使用StackTraceElement封装,打印调试代码!
- java.lang.StackTraceElement翻译
- java StackTraceElement 日志
- java.lang.StackTraceElement类
- java.lang.StackTraceElement类
- Thread类的getAllStackTraces()方法获取虚拟机中所有线程的StackTraceElement对象,可以查看堆栈
- java.lang.StackTraceElement source code
- WinForm之选择本地文件
- [每日问答]包含L1正则化项的目标函数如何求导?
- c程序设计语言第二版1.18
- 【php基础班】第6天 padding_margin、CSS背景、CSS Sprite、CSS表格属性、CSS浮动与清除
- java 关于wait 和notify
- StackTraceElement的简单使用
- HDU 1251
- linux软件管理学习笔记
- 真正解决TextView行间距、字间距的问题
- 最强平衡树——Treap[以我的最弱击败你的最强]
- 机器学习实战——python实现Logistic回归
- Andy's First Dictionary-UVA 10815
- 学习之道
- iBatis/mybits与Hibernate