欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java StackTraceElement实例代码

程序员文章站 2023-10-20 12:10:08
本文研究的主要是java stacktraceelement的相关内容,具体介绍如下。 stacktrace用栈的形式保存了方法的调用信息。 可用threa...

本文研究的主要是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实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!