Java 中的 static 使用之靜態(tài)變量
大家都知道太惠,我們可以基于一個(gè)類創(chuàng)建多個(gè)該類的對(duì)象箱靴,每個(gè)對(duì)象都擁有自己的成員淳地,互相獨(dú)立捡偏。然而在某些時(shí)候唤冈,我們更希望該類所有的對(duì)象共享同一個(gè)成員峡迷。此時(shí)就是?static 大顯身手的時(shí)候了R啊!
Java 中被 static 修飾的成員稱為靜態(tài)成員或類成員绘搞。它屬于整個(gè)類所有彤避,而不是某個(gè)對(duì)象所有,即被類的所有對(duì)象所共享夯辖。靜態(tài)成員可以使用類名直接訪問琉预,也可以使用對(duì)象名進(jìn)行訪問。當(dāng)然蒿褂,鑒于他作用的特殊性更推薦用類名訪問~~
使用 static 可以修飾變量圆米、方法和代碼塊卒暂。
本小節(jié),我們先認(rèn)識(shí)一下靜態(tài)變量娄帖。
例如也祠,我們?cè)陬愔卸x了一個(gè) 靜態(tài)變量 hobby ,操作代碼如下所示:
要注意哦:靜態(tài)成員屬于整個(gè)類近速,當(dāng)系統(tǒng)第一次使用該類時(shí)诈嘿,就會(huì)為其分配內(nèi)存空間直到該類被卸載才會(huì)進(jìn)行資源回收!~~
Java 中的 static 使用之靜態(tài)方法
與靜態(tài)變量一樣削葱,我們也可以使用 static 修飾方法奖亚,稱為靜態(tài)方法或類方法。其實(shí)之前我們一直寫的 main 方法就是靜態(tài)方法析砸。靜態(tài)方法的使用如:
運(yùn)行結(jié)果:
1昔字、?靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員,但不能直接調(diào)用非靜態(tài)成員首繁。如
如果希望在靜態(tài)方法中調(diào)用非靜態(tài)變量李滴,可以通過創(chuàng)建類的對(duì)象,然后通過對(duì)象來訪問非靜態(tài)變量蛮瞄。如:
2所坯、?在普通成員方法中,則可以直接訪問同類的非靜態(tài)變量和靜態(tài)變量挂捅,如下所示:
3芹助、?靜態(tài)方法中不能直接調(diào)用非靜態(tài)方法,需要通過對(duì)象來訪問非靜態(tài)方法闲先。如:
Java 中的 static 使用之靜態(tài)初始化塊
Java 中可以通過初始化塊進(jìn)行數(shù)據(jù)賦值状土。如:
在類的聲明中,可以包含多個(gè)初始化塊伺糠,當(dāng)創(chuàng)建類的實(shí)例時(shí)蒙谓,就會(huì)依次執(zhí)行這些代碼塊。如果使用 static 修飾初始化塊训桶,就稱為靜態(tài)初始化塊累驮。
需要特別注意:靜態(tài)初始化塊只在類加載時(shí)執(zhí)行,且只會(huì)執(zhí)行一次舵揭,同時(shí)靜態(tài)初始化塊只能給靜態(tài)變量賦值谤专,不能初始化普通的成員變量。
我們來看一段代碼:
運(yùn)行結(jié)果:
通過輸出結(jié)果午绳,我們可以看到置侍,程序運(yùn)行時(shí)靜態(tài)初始化塊最先被執(zhí)行,然后執(zhí)行普通初始化塊,最后才執(zhí)行構(gòu)造方法蜡坊。由于靜態(tài)初始化塊只在類加載時(shí)執(zhí)行一次杠输,所以當(dāng)再次創(chuàng)建對(duì)象 hello2 時(shí)并未執(zhí)行靜態(tài)初始化塊。