由static修飾的變量稱(chēng)為靜態(tài)變量,其實(shí)質(zhì)上就是一個(gè)全局變量。如果某個(gè)內(nèi)容是被所有對(duì)象所共享,那么該內(nèi)容就應(yīng)該用靜態(tài)修飾;沒(méi)有被靜態(tài)修飾的內(nèi)容,其實(shí)是屬于對(duì)象的特殊描述。
不同的對(duì)象的實(shí)例變量將被分配不同的內(nèi)存空間,如果類(lèi)中的成員變量有類(lèi)變量,那么所有對(duì)象的這個(gè)類(lèi)變量都分配給相同的一處內(nèi)存,改變其中一個(gè)對(duì)象的這個(gè)類(lèi)變量會(huì)影響其他對(duì)象的這個(gè)類(lèi)變量,也就是說(shuō)對(duì)象共享類(lèi)變量。
成員變量和類(lèi)變量的區(qū)別:
1.兩個(gè)變量的生命周期不同
- 成員變量隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的回收而釋放。
- 靜態(tài)變量隨著類(lèi)的加載而存在,隨著類(lèi)的消失而消失。
2.調(diào)用方式不同
- 成員變量只能被對(duì)象調(diào)用。
- 靜態(tài)變量可以被對(duì)象調(diào)用,還可以被類(lèi)名調(diào)用。
3.別名不同
- 成員變量也稱(chēng)為實(shí)例變量。
- 靜態(tài)變量也稱(chēng)為類(lèi)變量。
4.數(shù)據(jù)存儲(chǔ)位置不同
- 成員變量存儲(chǔ)在堆內(nèi)存的對(duì)象中,所以也叫對(duì)象的特有數(shù)據(jù)。
- 靜態(tài)變量數(shù)據(jù)存儲(chǔ)在方法區(qū)(共享數(shù)據(jù)區(qū))的靜態(tài)區(qū),所以也叫對(duì)象的共享數(shù)據(jù)。
- static關(guān)鍵字,是一個(gè)修飾符,用于修飾成員(成員變量和成員函數(shù))。
特點(diǎn):
- 想要實(shí)現(xiàn)對(duì)象中的共性數(shù)據(jù)的對(duì)象共享??梢詫⑦@個(gè)數(shù)據(jù)進(jìn)行靜態(tài)修飾。
- 被靜態(tài)修飾的成員,可以直接被類(lèi)名所調(diào)用。也就是說(shuō),靜態(tài)的成員多了一種調(diào)用方式。類(lèi)名.靜態(tài)方式。
- 靜態(tài)隨著類(lèi)的加載而加載。而且優(yōu)先于對(duì)象存在。
弊端:
1.有些數(shù)據(jù)是對(duì)象特有的數(shù)據(jù),是不可以被靜態(tài)修飾的。因?yàn)槟菢拥脑?,特有?shù)據(jù)會(huì)變成對(duì)象的共享數(shù)據(jù)。這樣對(duì)事物的描述就出了問(wèn)題。所以,在定義靜態(tài)時(shí),必須要明確,這個(gè)數(shù)據(jù)是否是被對(duì)象所共享的。
2.靜態(tài)方法只能訪問(wèn)靜態(tài)成員,不可以訪問(wèn)非靜態(tài)成員。
因?yàn)殪o態(tài)方法加載時(shí),優(yōu)先于對(duì)象存在,所以沒(méi)有辦法訪問(wèn)對(duì)象中的成員。
3.靜態(tài)方法中不能使用this,super關(guān)鍵字。
因?yàn)閠his代表對(duì)象,而靜態(tài)在時(shí),有可能沒(méi)有對(duì)象,所以this無(wú)法使用。
什么時(shí)候定義靜態(tài)成員呢?或者說(shuō):定義成員時(shí),到底需不需要被靜態(tài)修飾呢?
成員分兩種:
1.成員變量。(數(shù)據(jù)共享時(shí)靜態(tài)化)
該成員變量的數(shù)據(jù)是否是所有對(duì)象都一樣:
如果是,那么該變量需要被靜態(tài)修飾,因?yàn)槭枪蚕淼臄?shù)據(jù)。
如果不是,那么就說(shuō)這是對(duì)象的特有數(shù)據(jù),要存儲(chǔ)到對(duì)象中。
2.成員函數(shù)。(方法中沒(méi)有調(diào)用特有數(shù)據(jù)時(shí)就定義成靜態(tài))
如果判斷成員函數(shù)是否需要被靜態(tài)修飾呢?
只要參考,該函數(shù)內(nèi)是否訪問(wèn)了對(duì)象中的特有數(shù)據(jù):
如果有訪問(wèn)特有數(shù)據(jù),那方法不能被靜態(tài)修飾。
如果沒(méi)有訪問(wèn)過(guò)特有數(shù)據(jù),那么這個(gè)方法需要被靜態(tài)修飾。
成員變量和靜態(tài)變量的區(qū)別:
1.成員變量所屬于對(duì)象。所以也稱(chēng)為實(shí)例變量。
- 靜態(tài)變量所屬于類(lèi)。所以也稱(chēng)為類(lèi)變量。
2.成員變量存在于堆內(nèi)存中。
- 靜態(tài)變量存在于方法區(qū)中。
3.成員變量隨著對(duì)象創(chuàng)建而存在。隨著對(duì)象被回收而消失。
- 靜態(tài)變量隨著類(lèi)的加載而存在。隨著類(lèi)的消失而消失。
4.成員變量只能被對(duì)象所調(diào)用。
- 靜態(tài)變量可以被對(duì)象調(diào)用,也可以被類(lèi)名調(diào)用。
- 所以,成員變量可以稱(chēng)為對(duì)象的特有數(shù)據(jù),靜態(tài)變量稱(chēng)為對(duì)象的共享數(shù)據(jù)。
以上就是長(zhǎng)沙中公優(yōu)就業(yè)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java編程語(yǔ)言,Java成員變量與類(lèi)變量的區(qū)別”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。