1. 程式人生 > 其它 >程式碼執行順序

程式碼執行順序

/*
棧:方法只要執行,會壓棧。(區域性變數)
堆:new出來的物件都在堆中。垃圾回收器主要針對。(例項變數)
方法區:類的資訊,位元組碼資訊,程式碼片段。(靜態變數)

方法的程式碼片段放在方法區,但是方法執行過程當中需要的內在在棧中。

*/
public class StaticTest03 {

//靜態變數在什麼時候初始化?類載入時初始化。
//靜態變數儲存在哪裡?方法區
static int i = 100;

//靜態程式碼塊什麼時候執行?類載入時執行。
//只要是程式碼一定是儲存在方法區的。
static {
//這裡可以訪問i嗎?
System.out.println("i = " +i);
}

//例項變數
int k =111;//k變數是例項變數,在構造方法執行時記憶體空間才會開闢。

static {
//k變數可以訪問嗎?
//static靜態程式碼塊在類載入時執行,並且只執行一次
//類載入時,k變數空間還沒有開闢出來呢。
System.out.println("k="+k);//錯誤:無法從靜態上下文中引用非靜態變數 k

}

//入口(main方法執行之前實際上執行了很多程式碼)
public static void main(String[] args) {
System.out.println();
}
}
/*
總結:
到目前為止,你遇到的所有java程式,有順序要求的是哪些?
第一:對於一個方法來說,方法體中的程式碼是有順序的,遵循自上而下的順序執行。
第二:靜態程式碼塊1和靜態程式碼塊2是有先後順序的。
第三:靜態程式碼塊和靜態變數是有先後順序的。
*/