Java StackTraceElement實例代碼
本文研究的主要是Java StackTraceElement的相關(guān)內(nèi)容,具體介紹如下。
- StackTrace用棧的形式保存了方法的調(diào)用信息。
- 可用Thread.currentThread().getStackTrace()方法得到當(dāng)前線程的StackTrace信息,該方法返回的是一個StackTraceElement數(shù)組。
- 線程中methodA調(diào)用了methodB,那么methodA先入棧methodB再入棧。數(shù)組的第一個元素保存的是棧頂元素,最后一個元素保存的棧底元素。正好與調(diào)用棧的順序相反。
- 在StackTraceElement數(shù)組下標(biāo)為2的元素中保存了當(dāng)前方法的所屬文件名,當(dāng)前方法所屬的類名,以及該方法的名字,除此以外還可以獲取方法調(diào)用的行數(shù)。該特性可以用來設(shè)計日志模塊。
實例:
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
總結(jié)
以上就是本文關(guān)于Java StackTraceElement實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Java數(shù)據(jù)類型(八種基本數(shù)據(jù)類型+四種引用類型)以及數(shù)據(jù)類型轉(zhuǎn)換
java中除了基本數(shù)據(jù)類型之外,剩下的都是引用數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)類型(八種基本數(shù)據(jù)類型?+?四種引用類型)以及數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2024-04-04
Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問題
這篇文章主要介紹了Mybatis之foreach標(biāo)簽內(nèi)傳入list為空的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

