Java函式呼叫棧
阿新 • • 發佈:2019-02-09
Java的函式呼叫棧就是Java虛擬機器棧,它是執行緒私有的,與執行緒一同被建立,用於儲存棧幀。
棧幀隨著方法的呼叫而建立,隨著方法的結束而銷燬。可以說棧幀是方法的抽象。
於是,可以通過打印出Java虛擬機器棧中的棧幀資訊來了解函式呼叫過程。用於實現這個過程的Java程式碼如下:
package methodcall; public class Methods { public void method1() { method2(); } public void method2() { method3(); } public void method3() { Throwable ex = new Throwable(); /** * Throwable的getStackTrace()可以返回當前執行緒的虛擬機器棧資訊,返回 * 陣列的第一個元素是棧頂元素,最後一個元素是棧底元素。 */ StackTraceElement[] stackElements = ex.getStackTrace(); System.out.println(stackElements.length); for (StackTraceElement stackTraceElement : stackElements) { System.out.println(stackTraceElement.getMethodName()); } } }
package methodcall;
public class MethodCall {
public static void main(String[] args) {
// TODO Auto-generated method stub
Methods methods = new Methods();
methods.method1();
}
}
輸出結果如下:
4
method3
method2
method1
main
參考文獻:
《Java虛擬機器規範 Java SE 7》