首先static的成員是在類加載的時(shí)候初始化的,JVM的CLASSLOADER的加載,首次主動(dòng)使用加載,而非static的成員是在創(chuàng)建對(duì)象的時(shí)候,即new 操作的時(shí)候才初始化的;
先后順序是先加載,才能初始化,那么加載的時(shí)候初始化static的成員,此時(shí)非static的成員還沒(méi)有被加載必然不能使用,而非static的成員是在類加載之后,通過(guò)new操作符創(chuàng)建對(duì)象的時(shí)候初始化,此時(shí)static 已經(jīng)分配內(nèi)存空間,所以可以訪問(wèn)!
簡(jiǎn)單點(diǎn)說(shuō):靜態(tài)成員屬于類,不需要生成對(duì)象就存在了.而非靜態(tài)需要生成對(duì)象才產(chǎn)生.所以靜態(tài)成員不能直接訪問(wèn)非靜態(tài).
下面說(shuō)說(shuō)靜態(tài)的特點(diǎn):
1.隨著類的加載而加載
也就是,說(shuō)靜態(tài)會(huì)隨著類的消失而消失,說(shuō)明靜態(tài)的生命周期最長(zhǎng)
2.優(yōu)先于對(duì)象的存在
明確一點(diǎn):靜態(tài)是先存在的對(duì)象是后存在的
3.被所有對(duì)象共享
4.可以直接被類名多調(diào)用
實(shí)例變量和類變量的區(qū)別
1.存放位置
類變量隨著類的加載存在于方法區(qū)中,實(shí)例變量隨著對(duì)象的對(duì)象的建立存在于堆內(nèi)存里
2.生命周期
類變量生命周期最長(zhǎng),隨著“類”的加載而加載,隨著類的消失而消失,實(shí)例變量隨著“對(duì)象”的消失而消失
靜態(tài)的使用注意事項(xiàng):
1.靜態(tài)方法只能訪問(wèn)靜態(tài)成員(包括成員變量和成員方法)
非靜態(tài)方法可以訪問(wèn)靜態(tài)也可以訪問(wèn)非靜態(tài)
2.靜態(tài)方法中不可以定義this,super關(guān)鍵字
因?yàn)殪o態(tài)優(yōu)先于對(duì)象存在,所以靜態(tài)方法中不可以出現(xiàn)this,super關(guān)鍵字
3.主函數(shù)是靜態(tài)的。
靜態(tài)的利弊
利:對(duì)對(duì)象的共享數(shù)據(jù)進(jìn)行單獨(dú)空間的存儲(chǔ),節(jié)省空間,沒(méi)有必要每一個(gè)對(duì)象中都存儲(chǔ)一份
可以直接被類名所調(diào)用
弊:生命周期過(guò)長(zhǎng),訪問(wèn)出現(xiàn)局限性(只能訪問(wèn)靜態(tài))
聯(lián)系客服