static關(guān)鍵字:
一、特點:
1、static是一個修飾符,用于修飾成員。(成員變量,成員函數(shù))static修飾的成員變量 稱之為靜態(tài)變量或類變量。
2、static修飾的成員被所有的對象共享。
3、static優(yōu)先于對象存在,因為static的成員隨著類的加載就已經(jīng)存在。
4、static修飾的成員多了一種調(diào)用方式,可以直接被類名所調(diào)用,(類名.靜態(tài)成員)。
5、static修飾的數(shù)據(jù)是共享數(shù)據(jù),對象中的存儲的是特有的數(shù)據(jù)。
二、成員變量和靜態(tài)變量的區(qū)別:
1、生命周期的不同:
成員變量隨著對象的創(chuàng)建而存在隨著對象的回收而釋放。
靜態(tài)變量隨著類的加載而存在隨著類的消失而消失。
2、調(diào)用方式不同:
成員變量只能被對象調(diào)用。
靜態(tài)變量可以被對象調(diào)用,也可以用類名調(diào)用。(推薦用類名調(diào)用)
3、別名不同:
成員變量也稱為實例變量。
靜態(tài)變量稱為類變量。
4、數(shù)據(jù)存儲位置不同:
成員變量數(shù)據(jù)存儲在堆內(nèi)存的對象中,所以也叫對象的特有數(shù)據(jù)。
靜態(tài)變量數(shù)據(jù)存儲在方法區(qū)(共享數(shù)據(jù)區(qū))的靜態(tài)區(qū),所以也叫對象的共享數(shù)據(jù)。
三、靜態(tài)使用時需要注意的事項:
1、靜態(tài)方法只能訪問靜態(tài)成員。(非靜態(tài)既可以訪問靜態(tài),又可以訪問非靜態(tài))
2、靜態(tài)方法中不可以使用this或者super關(guān)鍵字。
3、主函數(shù)是靜態(tài)的
四、什么時候使用static來修飾
????????1、靜態(tài)變量:
? ? ? ? ? ? ? ? (1)當(dāng)分析對象中所具備的成員變量的值都是相同的。這時這個成員就可以被靜態(tài)修飾。
? ? ? ? ? ? ? ? (2)只要是數(shù)據(jù)在對象中都是不同的,就是對象的特有數(shù)據(jù),必須存儲在對象中,是非靜態(tài)的。
? ? ? ? ? ? ? ? (3)如果是相同的數(shù)據(jù),對象不需要做修改,只需要使用即可,不需要存儲在對象中,是靜態(tài)的。
????????2、靜態(tài)函數(shù)。
? ? ? ? ? ? ? ? (1)函數(shù)是否用靜態(tài)修飾,就參考一點,就是該函數(shù)功能是否有訪問到對象中特有的數(shù)據(jù)。
? ? ? ? ? ? ? ? (2)簡單來說,從源代碼看,該功能是否需要訪問非靜態(tài)的成員變量,如果需要,該功能就是非靜態(tài)的。如果不需要,就可以將該功能定義成靜態(tài)的。當(dāng)然,也可以定義成非靜態(tài),但是非靜態(tài)需要被對象調(diào)用,而僅創(chuàng)建對象是沒有意義的。
????????3、靜態(tài)代碼塊:
? ? ? ? ? ? ? ? (1)隨著類的調(diào)用或創(chuàng)建實例而執(zhí)行,而且只執(zhí)行一次。
????????????????作用:用于給類進行初始化。