public/protected/private
public表示公開,private表示私有,protected表示保護(hù),什么都不寫表示默認(rèn)default。
方法:
public protected default private
√ √ √ √ 同一類中
√ √ √ × 同一包中
√ √ × × 子類中
√ × × × 不同包中
成員變量:
考慮的安全性和健壯性的問題,成員變量一般為私有,并對(duì)外提供一些public的方法修改成員變量,在修改的方法中對(duì)輸入進(jìn)行判斷和控制。
Private成員變量只能在類的內(nèi)部使用。Public的成員變量可以在類的外部使用。
類:
類的權(quán)限修飾符只有不加和public兩種。不加表示只有同一個(gè)包的類可以訪問,public類所有的其他類都可以訪問。
Static
意為靜態(tài),用于修飾成員變量、方法、代碼塊。
靜態(tài)成員變量
靜態(tài)成員變量隨著類的加載而加載,多個(gè)對(duì)象共享該靜態(tài)成員變量。看如下代碼:
靜態(tài)方法
當(dāng)修飾方法的時(shí)候,這個(gè)方法隨著類的加載而加載,直接通過類名來調(diào)用。很多工具類中的方法都是靜態(tài)的,直接通過“類名.方法名”調(diào)用。不過靜態(tài)方法中不能使用非靜態(tài)成員變量和非靜態(tài)方法。
靜態(tài)代碼塊
靜態(tài)代碼塊(java的類在產(chǎn)生對(duì)象的時(shí)候,在調(diào)用構(gòu)造方法的時(shí)候,還會(huì)調(diào)用構(gòu)造代碼塊)。
請(qǐng)看下列代碼(證明構(gòu)造方法、構(gòu)造語句、靜態(tài)構(gòu)造語句運(yùn)行的先后順序):
需要注意的是:
(1)靜態(tài)方法不能調(diào)用非靜態(tài)方法, 靜態(tài)的方法是在構(gòu)造該類時(shí)加載的,類加載時(shí)會(huì)加載靜態(tài)的方法;此時(shí)非靜態(tài)方法還沒有加載,類初始化后才加載非靜態(tài)方法;所以靜態(tài)方法不能調(diào)用非靜態(tài)方法。通過在靜態(tài)方法的內(nèi)部創(chuàng)建對(duì)象(或形式參數(shù)來傳遞的對(duì)象)來間接訪問是完全可以的。
(2)java中的main方法必須寫成static的,因?yàn)椋陬惣虞d時(shí)無法創(chuàng)建對(duì)象,靜態(tài)方法可以不通過對(duì)象調(diào)用。所以在類加載時(shí)就可以通過main方法入口來運(yùn)行程序。
注意:父類中是靜態(tài)方法,子類中不能覆蓋為非靜態(tài)方法。在符合覆蓋規(guī)則的前提下,在父子類中,父類中的靜態(tài)方法可以被子類中的靜態(tài)方法覆蓋,但是沒有多態(tài)。
一個(gè)類在什么時(shí)候被加載?時(shí)機(jī) (延遲加載,能不加載就不加載
(1)new 一個(gè)對(duì)象的時(shí)候,加載
這個(gè)很好理解,不解釋了。(2)沒有創(chuàng)建對(duì)象,訪問類中靜態(tài)成員(方法和屬性)
(3)聲明一個(gè)類的引用,不加載(4)創(chuàng)建子類,先加載父類,再加載子類
(5)父類中的公開靜態(tài)方法,子類繼承,使用子類的類名調(diào)用此方法,加載父類
Abstract
這個(gè)修飾符表示抽象,可以用在方法和類前面。
抽象方法表示,類應(yīng)該具備此功能,但不同的子類應(yīng)該有不同的實(shí)現(xiàn)方式,所以沒有定義具體如何做。具體如何做由子類自己實(shí)現(xiàn)。子類在實(shí)現(xiàn)所有抽象方法后才能new對(duì)象。
如有類的內(nèi)部有抽象方法,則類也必須是抽象的。抽象類不能直接new對(duì)象。抽象類中可以有非抽象方法。
以上就是小編為大家?guī)淼年P(guān)于Java中修飾符的總結(jié)(fina除外)的全部?jī)?nèi)容了,希望對(duì)大家有所幫助,多多支持服務(wù)器之家~