Java -- 分析堆疊軌跡元素
阿新 • • 發佈:2019-02-15
最近學習《Java核心技術》終於進行到了第七章異常機制,這章給我的印象比前面的介面,繼承和類好多了,今天分析一下堆疊軌跡元素。
堆疊軌跡(stack trace)是一個方法呼叫過程的列表,包含了程式執行過程中方法的呼叫的特定位置,當一個程式正常執行終止時候,這個列表會顯示出來。
直接使用getStackTrace方法,會得到StackTraceElement物件一個數組,可以進行分析
StackTraceElement[] frames = t.getStackTrace(); for (StackTraceElement f : frames) { System.out.println(f); }
StackTraceElement類含有能夠獲得檔名和當前執行的程式碼行號的方法,同時,含有能夠獲得類名和方法名的方法。
下面上程式碼:列印了遞迴階乘的函式的堆疊情況()
package com.exception; import java.util.Scanner; /** * display a trace feature of a recursive method all * 顯示所有遞迴方法的跟蹤特性。 * @author aaa * */ public class stackTraceTest { //factorial階乘 public static int factorial(int n) { System.out.println("factorial("+ n +"):"); Throwable t = new Throwable(); //使用getStackTrace方法 ,得到StackTraceElement物件一個數組,可以進行分析 StackTraceElement[] frames = t.getStackTrace(); for (StackTraceElement f : frames) { System.out.println(f); } int r; if (n <= 1) { r = 1; }else { r=n*factorial(n-1); } System.out.println("return"+r); return r; } public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Enter n :"); int n = in.nextInt(); factorial(n); } }
例如,如果計算factorial(5); 將列印下列結果:
Enter n : 5 factorial(5): com.exception.stackTraceTest.factorial(stackTraceTest.java:15) com.exception.stackTraceTest.main(stackTraceTest.java:34) factorial(4): com.exception.stackTraceTest.factorial(stackTraceTest.java:15) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.main(stackTraceTest.java:34) factorial(3): com.exception.stackTraceTest.factorial(stackTraceTest.java:15) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.main(stackTraceTest.java:34) factorial(2): com.exception.stackTraceTest.factorial(stackTraceTest.java:15) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.main(stackTraceTest.java:34) factorial(1): com.exception.stackTraceTest.factorial(stackTraceTest.java:15) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.factorial(stackTraceTest.java:25) com.exception.stackTraceTest.main(stackTraceTest.java:34) return1 return2 return6 return24 return120
大概就是這個樣子了~~~
小夥伴們可以關注我的公眾號,留言必回覆哦
Java核心基礎
----------------------------------
長按關注哦(看那兩撇小鬍子)
基礎 | 心得 | 經歷 | 更重要的是開心嘛!