參考文章:https://blog.csdn.net/lovequanquqn/article/details/81585991
StackTrace(堆棧軌跡)存放的就是方法調用棧的信息,每次調用一個方法會產生一個方法棧,當前方法調用另外一個方法時會使用棧將當前方法的現場信息保存在此方法棧當中,獲取這個棧就可以得到方法調用的詳細過程。例如:異常處理中常用的e.printStackTrace()實質就是打印異常調用的堆棧信息。
獲取StackTraceElement(StackTraceElement是StackTrace(堆棧軌跡)中的一個方法對象)的方法有兩種,均返回StackTraceElement數組,也就是這個棧的信息:
getStackTrace()方法
//獲取到堆棧軌跡的兩種方法 Thread.currentThread().getStackTrace() new Throwable().getStackTrace()
分別進行實際驗證一下:
public static void main(String[] args) { add(); testStackTraceElements(); testThrowNewElement(); } public static void add() { System.out.println("准備測試"); } public static void testStackTraceElements() { System.out.println("-----------------"); StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); for (int i = 0; i < stackTraceElements.length; i++) { System.out.println(stackTraceElements[i]); } } public static void testThrowNewElement() { System.out.println("----------------------"); StackTraceElement[] testThrows = new Throwable().getStackTrace(); for (int i = 0; i < testThrows.length; i++) { System.out.println(testThrows[i].getClassName()); System.out.println(testThrows[i].getFileName()); System.out.println(testThrows[i].getLineNumber()); System.out.println(testThrows[i].getMethodName()); } }
可以看到每一個StackTraceElement元素都有獲取類名、文件名、所在行數及方法名具體的get方法。
結果如下,【在日志中,getStackTrace()方法還是比較常用的。】