1. 程式人生 > >java中成員變數(例項變數),區域性變數,類變數的區別

java中成員變數(例項變數),區域性變數,類變數的區別

主要從以下幾個方面來比較:

作用域:
成員變數:成員變數又叫例項變數,它是類的例項,所作用於所在的整個類。
區域性變數:只在某個範圍有效(例如方法中)。
類變數:有效性主要和變數前的修飾符有關,例如private修飾就只對此類有效,public對所有包都有效。

儲存位置:
成員變數:隨著物件的建立而建立,物件消失則此變數也消失,儲存於堆記憶體中。
區域性變數:在方法被呼叫時產生,方法呼叫結束則變數消失。儲存與棧記憶體中。
類變數:類載入即存在。

初始值:
成員變數:無須賦初始值,系統自動預設初始值。例如:String預設為null,int預設為0。
區域性變數:必須賦初始值才能使用,否則報空指標錯誤。
類變數:和成員變數相似。

呼叫方式:
成員變數:通過物件名呼叫,此變數屬於物件。
區域性變數:通過方法名呼叫。
類變數:此變數屬於類,可以直接通過類名呼叫,也可以通過物件名呼叫。

生命週期:
成員變數:隨著物件的建立而建立,隨著物件的消失而消失。
區域性變數:隨著方法的呼叫而建立,隨著方法的完成而消失。
類變數:隨著類的載入而存在,隨著類的消失而消失,生命週期最長。

附上簡單程式碼:

package study02;

public class Test {
	private int a;//成員變數
	private static String str;//靜態變數(類變數)
	
	public int print(){
		int b=2;//區域性變數
		return b;
	}
	public static void main(String[] args) {
		Test test=new Test();
		System.out.println(Test.str);//呼叫類變數
		System.out.println(test.str);//呼叫成員變數
		System.out.print(test.print());//列印區域性變數
	}
	//此處變數都使用private修飾而不使用public是為了減少程式碼的耦合。
}

執行結果:
null
null
2