Java StackTraceElement instance code

  • 2021-01-18 06:25:32
  • OfStack

This paper mainly studies Java StackTraceElement related content, detailed introduction is as follows.

StackTrace stores method invocation information in a stack. Thread.currentThread ().getStackTrace () method, which returns an array of StackTraceElement, is used to retrieve the current thread's StackTrace information. methodA calls methodB on thread, so methodA pushes methodB on thread. The first element of the array holds the top element of the stack and the last element holds the bottom element of the stack. Just the reverse order of the call stack. The element in the StackTraceElement array with index 2 holds the filename of the current method, the class name of the current method, and the name of the method, in addition to the number of lines of method calls. This feature can be used to design logging modules.

Example:


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());
	}
}

Output:

[

------- > 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

]

conclusion

This article is about Java StackTraceElement example code is all content, I hope to help you. Interested friends can continue to refer to the site of other related topics, if there are shortcomings, welcome to leave a message to point out. Thank you for your support!


Related articles: