当前位置: 移动技术网 > IT编程>开发语言>Java > Java StackTraceElement实例代码

Java StackTraceElement实例代码

2019年07月19日  | 移动技术网IT编程  | 我要评论

本文研究的主要是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() => false

this's method name is main

总结

以上就是本文关于java stacktraceelement实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网