Java StackTraceElement实例代码
本文研究的主要是JavaStackTraceElement的相关内容,具体介绍如下。
- StackTrace用栈的形式保存了方法的调用信息。
- 可用Thread.currentThread().getStackTrace()方法得到当前线程的StackTrace信息,该方法返回的是一个StackTraceElement数组。
- 线程中methodA调用了methodB,那么methodA先入栈methodB再入栈。数组的第一个元素保存的是栈顶元素,最后一个元素保存的栈底元素。正好与调用栈的顺序相反。
- 在StackTraceElement数组下标为2的元素中保存了当前方法的所属文件名,当前方法所属的类名,以及该方法的名字,除此以外还可以获取方法调用的行数。该特性可以用来设计日志模块。
实例:
packagecom.demo.test; publicclassStackTraceDemo{ publicstaticvoidtestA(){ testB(); } publicstaticvoidtestB(){ StackTraceElement[]stackTraceElements=Thread.currentThread().getStackTrace(); System.out.println("------->StackTraceElement[]"); for(inti=0;i"+i); System.out.println(stackTraceElements[i]); System.out.println("StackTraceElement.getClassName()=>"+stackTraceElements[i].getClassName()); System.out.println("StackTraceElement.getFileName()=>"+stackTraceElements[i].getFileName()); System.out.println("StackTraceElement.getLineNumber()=>"+stackTraceElements[i].getLineNumber()); System.out.println("StackTraceElement.getMethodName()=>"+stackTraceElements[i].getMethodName()); System.out.println("StackTraceElement.isNativeMethod()=>"+stackTraceElements[i].isNativeMethod()); } } publicstaticStringgetMethodName(){ StackTraceElement[]stackTraceElements=Thread.currentThread().getStackTrace(); if(stackTraceElements.length>2){ returnstackTraceElements[2].getMethodName(); } returnnull; } publicstaticvoidmain(String[]args){ testA(); System.out.println("\nthis'smethodnameis"+getMethodName()); } }
输出:
------->StackTraceElement[]
------->0
java.lang.Thread.getStackTrace(UnknownSource)
StackTraceElement.getClassName()=>java.lang.Thread
StackTraceElement.getFileName()=>null
StackTraceElement.getLineNumber()=>-1
StackTraceElement.getMethodName()=>getStackTrace
StackTraceElement.isNativeMethod()=>false
------->1
com.demo.test.StackTraceDemo.testB(StackTraceDemo.java:10)
StackTraceElement.getClassName()=>com.demo.test.StackTraceDemo
StackTraceElement.getFileName()=>StackTraceDemo.java
StackTraceElement.getLineNumber()=>10
StackTraceElement.getMethodName()=>testB
StackTraceElement.isNativeMethod()=>false
------->2
com.demo.test.StackTraceDemo.testA(StackTraceDemo.java:6)
StackTraceElement.getClassName()=>com.demo.test.StackTraceDemo
StackTraceElement.getFileName()=>StackTraceDemo.java
StackTraceElement.getLineNumber()=>6
StackTraceElement.getMethodName()=>testA
StackTraceElement.isNativeMethod()=>false
------->3
com.demo.test.StackTraceDemo.main(StackTraceDemo.java:32)
StackTraceElement.getClassName()=>com.demo.test.StackTraceDemo
StackTraceElement.getFileName()=>StackTraceDemo.java
StackTraceElement.getLineNumber()=>32
StackTraceElement.getMethodName()=>main
StackTraceElement.isNativeMethod()=>falsethis'smethodnameismain
总结
以上就是本文关于JavaStackTraceElement实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!