Java StackTraceElement实例代码
本文研究的主要是java stacktraceelement的相关内容,具体介绍如下。
- stacktrace用栈的形式保存了方法的调用信息。
- 可用thread.currentthread().getstacktrace()方法得到当前线程的stacktrace信息,该方法返回的是一个stacktraceelement数组。
- 线程中methoda调用了methodb,那么methoda先入栈methodb再入栈。数组的第一个元素保存的是栈顶元素,最后一个元素保存的栈底元素。正好与调用栈的顺序相反。
- 在stacktraceelement数组下标为2的元素中保存了当前方法的所属文件名,当前方法所属的类名,以及该方法的名字,除此以外还可以获取方法调用的行数。该特性可以用来设计日志模块。
实例:
package com.demo.test; public class stacktracedemo { public static void testa() { testb(); } public static void testb() { stacktraceelement[] stacktraceelements = thread.currentthread().getstacktrace(); system.out.println("-------> stacktraceelement[]"); for (int i = 0; i < stacktraceelements.length; i++) { system.out.println("-------> " + 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()); } } public static string getmethodname() { stacktraceelement[] stacktraceelements = thread.currentthread().getstacktrace(); if(stacktraceelements.length > 2) { return stacktraceelements[2].getmethodname(); } return null; } public static void main(string[] args) { testa(); system.out.println("\nthis's method name is " + getmethodname()); } }
输出:
-------> stacktraceelement[]
-------> 0
java.lang.thread.getstacktrace(unknown source)
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's method name is main
总结
以上就是本文关于java stacktraceelement实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!