1. 程式人生 > >關於java中成員變數有預設初始化而區域性變數沒有

關於java中成員變數有預設初始化而區域性變數沒有

在java中如果沒有給成員變數賦值java會自動賦0,而對於區域性變數卻不會這是為什麼呢?下面就討論下java如何給成員變數賦值的。

1普通成員變數:對於普通成員變數而言,當你例項化的時候通過建構函式java會自動賦0。如下

public class test {

	int i;
	static int j;
	
	public static void main(String[] args) throws IOException {  
		test a=new test();
	   }
	
}

通過構造方法使得i的值變成了0.

2靜態成員變數:這裡比較複雜,主要涉及到虛擬機器的機制。當把java原始檔編譯成.class位元組碼後,.class檔案會作為虛擬機器的輸入,虛擬機器再經過載入、連線、初始化、使用和解除安裝。在連線階段,虛擬機器會進行驗證、準備和解析。

正是在準備時,虛擬機器會為static修飾的變數開闢空間,注意這裡只是開闢空間,並沒有執行程式碼。如果我寫的是static int j=10;那我開闢的空間中是不會存放10的,因為程式碼還沒執行呢。那麼這個空間裡的值是多少呢?正常的思維當然是我們就自動給他填個零值唄,虛擬機器就是這麼做的。於是static int j;程式碼即使我沒有對j進行初始化,它依然會有零值。