1. 程式人生 > >Java函式呼叫棧

Java函式呼叫棧

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》