實例變數和類別變數的定義
在宣告成員變數時,以關鍵字static給予修飾的稱作類別變量,類別變數也稱為static變數或靜態變量,而沒有用關鍵字static給予修飾的稱作實例變數。
例如:
classMain{floatx;//實例變數staticinty;//類別變數}
注意:
關鍵字static需要放在變數的類型前面。
實例變數和類別變數的區別
1. 不同物件的實例變數互不相同:
一個類別透過使用new運算子可以建立多個不同的對象,這些物件將被分配不同的成員變量,分配給不同的對象的實例變數佔有不同的記憶體空間,改變其中一個對象的實例變數不會影響其他物件的實例變數。
2. 所有物件共享類別變數:
如果類別中有類別變量,當使用new運算子建立多個不同的物件時,分配給這些物件的這個類別變數佔有相同的一個內存,改變其中一個物件的這個類別變數會影響其他物件的這個類變量,也就是說物件共享類別變數。
3. 透過類別名稱直接存取類別變數:
當Java程式執行時,類別的字節碼檔案被載入到內存,如果該類別沒有創建對象,類別中的實例變數不會被分配內存。但是,類別中的類別變量,當該類別載入到記憶體時,就分配了相應的記憶體空間。如果該類別創建對象,那麼不同對象的實例變量互不相同,即分配不同的內存空間,而類變量不再重新分配內存,所有的對象共享類變量,即所有的對象的類變量是相同的一處記憶體空間,類別變數的記憶體空間直到程式退出運行,才釋放所佔有的記憶體。
因此,類別變數不僅可以透過某個物件訪問,也可以直接透過類別名稱訪問,而物件的實例變數可以透過該物件訪問,但不能使用類別名稱訪問。