成員變量:是定義在類中,方法體之外的變量。這種變量在創建對象的時候實例化。成員變量可以被類中方法、構造方法和特定類的語句塊訪問。
類變量:也聲明在類中,方法體之外,但必須聲明為static類型。
1.生命周期不同
成員變量是對象創建時而存在,隨着對象的回收而被釋放
類變量是類創建的時候而存在,隨着類的消失而消失的;
2.調用方
成員變量只能被對象調用,作用域是在對象中
類變量可以被對象調用,還可以被類名調用
3.別名不同
成員變量稱實例變量
類變量也稱靜態變量
static:★★★ 關鍵字,是一個修飾符,用於修飾成員(成員變量和成員函數)。
靜態方法只能訪問靜態成員,不可以訪問非靜態成員。
因為靜態方法加載時,優先於對象存在,所以沒有辦法訪問對象中的成員。
靜態方法中不能使用this,super關鍵字。
因為this代表對象,而靜態在時,有可能沒有對象,所以this無法使用。
什么時候定義靜態成員呢?或者說:定義成員時,到底需不需要被靜態修飾呢?
成員分兩種:
1、成員變量。(數據共享時靜態化)
該成員變量的數據是否是所有對象都一樣:
如果是,那么該變量需要被靜態修飾,因為是共享的數據
如果不是,那么就說這是對象的特有數據,要存儲到對象中。
2、成員函數。(方法中沒有調用特有數據時就定義成靜態)
如果判斷成員函數是否需要被靜態修飾呢?
只要參考,該函數內是否訪問了對象中的特有數據:
如果有訪問特有數據,那方法不能被靜態修飾。
如果沒有訪問過特有數據,那么這個方法需要被靜態修飾。
成員變量和靜態變量的區別:
1、成員變量所屬於對象。所以也稱為實例變量。
靜態變量所屬於類。所以也稱為類變量。
2、成員變量存在於堆內存中。
靜態變量存在於方法區中。
3、成員變量隨着對象創建而存在。隨着對象被回收而消失。
靜態變量隨着類的加載而存在。隨着類的消失而消失。
4、成員變量只能被對象所調用 。
靜態變量可以被對象調用,也可以被類名調用。
所以,成員變量可以稱為對象的特有數據,靜態變量稱為對象的共享數據。