1. 程式人生 > >面試題:靜態變數和例項變數的區別?

面試題:靜態變數和例項變數的區別?

在語法定義上的區別:靜態變數前要加static關鍵字,而例項變數前則不加。
        在程式執行時的區別:例項變數屬於某個物件的屬性,必須建立了例項物件,其中的例項變數才會被分配空間,才能使用這個例項變數。靜態變數不屬於某個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的位元組碼,不用建立任何例項物件,靜態變數就會被分配空間,靜態變數就可以被使用了。總之,例項變數必須建立物件後才可以通過這個物件來使用,靜態變數則可以直接使用類名來引用。
        例如,對於下面的程式,無論建立多少個例項物件,永遠都只分配了一個staticVar變數,並且每建立一個例項物件,這個staticVar就會加1;但是,每建立一個例項物件,就會分配一個instanceVar,即可能分配多個instanceVar,並且每個instanceVar的值都只自加了1次。
public class Test11 {
	public static int staticVar = 0;
	public int instanceVar = 0;

	public Test11() {
		staticVar++;
		instanceVar++;
		System.out.println("staticVar=" + staticVar + ",instanceVar="
				+ instanceVar);
	}

	public static void main(String[] args) {
		Test11 test = new Test11();
		Test11 test1 = new Test11();
		Test11 test2 = new Test11();
	}
}

輸出:
staticVar=1,instanceVar=1
staticVar=2,instanceVar=1
staticVar=3,instanceVar=1