一語點(diǎn)破 Java 中的靜態(tài) static 關(guān)鍵字

思考:大家有沒有想過一個(gè)問題,靜態(tài)它為什么叫靜態(tài)?因?yàn)闀匣蛘邉e的文章里這么寫的都這么叫的?所以也跟著這么叫??????
1,模擬分析理解靜態(tài)
那今天咱們就分析分析,搞定它!
為了解決上邊的問題,咱們?cè)僖l(fā)一個(gè)問題:有靜肯定就有動(dòng)啊,那這個(gè)“靜”是相對(duì)于誰來說的?
要講明白這個(gè),首先需要知道Java中類和對(duì)象之間的關(guān)系
類是對(duì)某些類具有共同特征的事物的抽象,對(duì)象是根據(jù)類產(chǎn)生出的具體實(shí)例。
請(qǐng)注意:這里說的共同特征是指具有共同的屬性(長度)和共同的行為(方法),絕對(duì)不是指這些物體的數(shù)據(jù)都相同
舉個(gè)例子:張三和李四都屬于學(xué)生。這里的張三,李四就是具體的實(shí)例對(duì)象;學(xué)生就是一個(gè)抽象出來的具有共同特征的事物,學(xué)生某種事物都有共有班級(jí),姓名,年齡,性別等屬性,所以學(xué)生是個(gè)類。
但是張三這個(gè)具體的實(shí)例對(duì)象,他的班級(jí)是1班,姓名是張三,年齡是18歲,性別是男;
李四這個(gè)具體的實(shí)例對(duì)象,她的班級(jí)是2班,姓名是李四,年齡是18歲,性別是女。
這里的1班2班,18歲,男,女都是具體對(duì)象的具體數(shù)據(jù),這些數(shù)據(jù)是轉(zhuǎn)換張三,李四等這些不同實(shí)例對(duì)象的變化而變化的,是對(duì)象存儲(chǔ)的,這就是上邊說的相對(duì)于靜來說的那個(gè)動(dòng)
那什么是靜呢?說完了動(dòng),靜就很簡單了,靜就是不轉(zhuǎn)移對(duì)象的變化而變化,是某種物體共有的數(shù)據(jù),注意標(biāo)紅的幾個(gè)字,從而這些靜的數(shù)據(jù)的是通過類存儲(chǔ)的,不是通過對(duì)象變得
所以靜態(tài)變量又稱為“類變量”,非靜態(tài)的變量又稱為“實(shí)例變量”
繼續(xù)上邊的示例,學(xué)生類再加個(gè)分段國家,假設(shè)我們只討論中國范圍內(nèi),那么國家這個(gè)分區(qū)就可以定義成靜態(tài)的,因?yàn)閺埲钏囊岩约八械膶W(xué)生對(duì)象,他們國家都是中國,“中國”這個(gè)值學(xué)生類的所有對(duì)象共有的
靜態(tài)的就是類共有的。靜就是大家(類)都有的共有的,是相對(duì)于通過對(duì)象變化而變化的“動(dòng)”而言的
嗚啦啦的說了那么多是為了幫助大家更容易的去理解。
總之簡單粗暴的一句話:靜態(tài)的是繼承類的,非靜態(tài)是繼承對(duì)象的
那具體什么時(shí)候可以使用靜態(tài)呢?
2,什么時(shí)候可以使用靜態(tài)?
因?yàn)殪o態(tài)修飾的內(nèi)容有成員變量和成員方法,所以回答這個(gè)問題得從兩方面入手
什么時(shí)候可以定義靜態(tài)變量?
當(dāng)類別中出現(xiàn)所有對(duì)象都共有的數(shù)據(jù)時(shí),該分區(qū)就可以定義成靜態(tài)的。有時(shí)剛才說的學(xué)生類別里的國家這個(gè)分區(qū)就可以定義成靜態(tài)的。
什么時(shí)候可以定義靜態(tài)方法?
當(dāng)方法內(nèi)部沒有使用到非靜態(tài)數(shù)據(jù)(對(duì)象的特有數(shù)據(jù))時(shí),那么該方法就可以定義成靜態(tài)的
大家平常到的工具類XxxUtils就很符合上邊的場(chǎng)景,所以大家見到的工具類基本上都是靜態(tài)的,不用new對(duì)象,直接XxxUtils.xxx()調(diào)用
3,靜態(tài)的其他內(nèi)容理解
理解了上述內(nèi)容后,下邊的內(nèi)容就不難理解了
靜態(tài):static關(guān)鍵字
static關(guān)鍵字的用法:它是一個(gè)修飾符,用于修飾成員(成員變量,成員方法)
靜態(tài)的特點(diǎn):
1,通過類的加載而加載(就是說這個(gè)類一被加載進(jìn)內(nèi)存,靜態(tài)的東西就可以加載進(jìn)去了,這時(shí)候?qū)ο筮€不存在呢)
2,靜態(tài)先于對(duì)象存在
3,被所有的對(duì)象共享
4,可以直接被類名調(diào)用,也可以被對(duì)象調(diào)用
靜態(tài)使用的注意事項(xiàng):
1,靜態(tài)方法只能訪問靜態(tài)成員(屬性和方法),不能訪問非靜態(tài)成員。因?yàn)殪o態(tài)在的時(shí)候非靜態(tài)的還沒在呢
2,非靜態(tài)方法可以訪問靜態(tài)成員,也可以訪問非靜態(tài)成員
3,因?yàn)殪o態(tài)先于對(duì)象的存在而存在,所以靜態(tài)方法中不可以出現(xiàn)this,super關(guān)鍵字。
靜態(tài)的利弊:
1,利:對(duì)于所有對(duì)象都共有的數(shù)據(jù),沒必要每個(gè)對(duì)象中都存在一份,可以使用靜態(tài),節(jié)省空間;可以不新建對(duì)象,直接用類名調(diào)用
2,缺點(diǎn):因?yàn)殪o態(tài)是通過類存在的,所以生命周期過長;訪問出現(xiàn)局限性,只能訪問靜態(tài)
靜態(tài)和非靜態(tài)的數(shù)據(jù)在內(nèi)存中的存儲(chǔ)也有所不同,下篇會(huì)接著講一下它們?cè)趦?nèi)存中是怎么存的,以及實(shí)例化一個(gè)對(duì)象具體都做了些啥
以上就是本人對(duì)java中靜態(tài)的一些理解和總結(jié),若有不對(duì)的地方,歡迎留言指出,一起學(xué)習(xí)進(jìn)步
DD自研的滬牌代拍業(yè)務(wù),點(diǎn)擊直達(dá)
往期推薦
掃一掃,關(guān)注我
一起學(xué)習(xí),一起進(jìn)步
每周贈(zèng)書,福利不斷
﹀
﹀
﹀
深度內(nèi)容
推薦加入




