java中的類和方法的修飾符Java程序在定義類時(shí),除了使用class關(guān)鍵字標(biāo)識(shí)之外,還可以在class之前增加若干類的修飾符來(lái)修飾限定所定義的類的特性。類的修飾符分為訪問控制符和非訪問控制符兩大類。修飾符之間的先后排列次序?qū)︻惖男再|(zhì)沒有任何影響。 一,非訪問修飾符。 1,抽象類: 凡是用abstract修飾符修飾的類被稱為抽象類。抽象類就是沒有具體對(duì)象的概念類。 抽象類是一種經(jīng)過優(yōu)化的概念組織方式:把共同特點(diǎn)抽象出來(lái);其后在描述和處理某一種具體對(duì)象時(shí),就只需描述不同的特殊之處。這種組織方式使得所有的概念層次分明,簡(jiǎn)潔洗練,非常符合人們?nèi)粘5乃季S習(xí)慣。 由于抽象類是它的所有子類的公共屬性的集合,所以使用抽象類的一個(gè)優(yōu)點(diǎn)就是可以充分利用這些公共屬性來(lái)提高開發(fā)和維護(hù)程序的效率。 值得一提的是,面向?qū)ο蠹夹g(shù)是要用更接近于人類思維方式的方法來(lái)處理實(shí)際問題,抽象類的設(shè)立就是這種思想的具體體現(xiàn)之一,它是模仿人類的思維模式的產(chǎn)物。 2,最終類: 如果一個(gè)類被final修飾符所修飾和限定,說明這個(gè)類不可能有子類。 被定義為final的類通常是一些有固定作用、用來(lái)完成某種標(biāo)準(zhǔn)功能的類。如Java系統(tǒng)定義好的用來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)功能的InterAddress、Socket等類都是final類。 abstract和final修飾符不能同時(shí)修飾一個(gè)類,因?yàn)閍bstract類自身沒有具體對(duì)象,需要派生出子類后在創(chuàng)建子類的對(duì)象;而final類不可能有子類。這樣放在一起修飾就沒有意義了。 3,有些類的修飾符也可以用來(lái)修飾類中的域或方法: (1) <1> 靜態(tài)域: 用static修飾符修飾的域是僅屬于類的靜態(tài)域。靜態(tài)域是類中每個(gè)對(duì)象共享的域。他們是類的域,不屬于任何一個(gè)類的具體對(duì)象。是一個(gè)公共的存儲(chǔ)單元,任何一個(gè)類的對(duì)象訪問它時(shí),取到的都是相同的數(shù)值。 <2> 靜態(tài)初始化器: 靜態(tài)初始化器是由關(guān)鍵字static引導(dǎo)的一對(duì)大括號(hào)括起的語(yǔ)句組。作用是:在加載時(shí),初始化類的靜態(tài)域。如有多個(gè)static{}程序段,則在類的初始化時(shí),會(huì)依次執(zhí)行. 與構(gòu)造函數(shù)相同,他們都是用來(lái)完成初始化的工作,但是靜態(tài)初始化器與構(gòu)造函數(shù)有三點(diǎn)不同: ①構(gòu)造函數(shù)是對(duì)每個(gè)新創(chuàng)建的對(duì)象初始化,而靜態(tài)初始化器是對(duì)類自身進(jìn)行初始化。 ②構(gòu)造函數(shù)是在用new運(yùn)算符產(chǎn)生新對(duì)象時(shí)由系統(tǒng)自動(dòng)執(zhí)行,而靜態(tài)初始化器則是在它所屬的類加載到內(nèi)存時(shí)由系統(tǒng)調(diào)用執(zhí)行。 ③不同于構(gòu)造函數(shù),靜態(tài)初始化器不是方法,沒有方法名、返回值和參數(shù)列表。 <3> 最終域: 用final修飾的域,實(shí)際上就是Java中的常量。 用final修飾符說明常量時(shí),需要注意以下幾點(diǎn): ①需要說明常量的數(shù)據(jù)類型。 ②需要同時(shí)指出常量的具體取值。 ③因?yàn)樗蓄悓?duì)象的常量成員,其數(shù)值都固定一致,為了節(jié)省空間,常量通常聲明為static。 <4> 易失域: 如果一個(gè)域被volatile修飾符所修飾,說明這個(gè)域可能同時(shí)被幾個(gè)線程所控制和修改,即這個(gè)域不僅僅被當(dāng)前程序所掌握,在運(yùn)行過程中可能在其他未知的程序操作影響和改變?cè)撚虻娜≈怠T谑褂卯?dāng)中應(yīng)該特別注意。 通常,volatile用來(lái)修飾接受外部輸入的域。如表示當(dāng)前時(shí)間的變量將系統(tǒng)的后臺(tái)線程隨時(shí)修改,以保證程序中取到的總是最新的當(dāng)前系統(tǒng)時(shí)間,所以可以把它定義為易失域。 (2)方法:是類的動(dòng)態(tài)屬性,標(biāo)志了類所具有的功能和操作。小括號(hào)是方法的標(biāo)志。 <1> 抽象方法: 修飾符abstract修飾的抽象方法是一種僅有方法頭,而沒有具體的方法體和操作實(shí)現(xiàn)的方法。使用抽象方法的目的是使所有的子類,對(duì)外都呈現(xiàn)一個(gè)相同名字的方法,是一個(gè)統(tǒng)一的接口。所有的抽象方法,都必須存在于抽象類之中。 <2> 靜態(tài)方法: 用static修飾符修飾的方法,是屬于整個(gè)類的類方法,不用的是對(duì)象或?qū)嵗姆椒āU{(diào)用這種方法時(shí),應(yīng)該使用類名作前綴;這種方法在內(nèi)存中的代碼段將隨著類的定義而分配和裝載,不被任何一個(gè)對(duì)象專有;只能處理屬于整個(gè)類的成員變量。 <3> 最終方法: 用final修飾符修飾的類方法。功能和內(nèi)部語(yǔ)句不能再更改的方法,不能再被繼承。 注意:所有已被private修飾符限定為私有的方法,以及所有包含在final類中的方法,都被缺省地認(rèn)為是final的。 <4> 本地方法: 用native修飾符聲明其他語(yǔ)言書寫方法體并具體實(shí)現(xiàn)方法功能的特殊的方法。這里的其他語(yǔ)言包括C/C++/FROTRAN/匯編等。由于native的方法的方法體使用其他語(yǔ)言在程序外部寫成,所以所有的native方法都沒有方法體,而用一個(gè)分號(hào)代替。 <5> 同步方法: 如果synchronized修飾的方法是一個(gè)類的方法(即static的方法),那么在被調(diào)用執(zhí)行前,將把系統(tǒng)類Class中對(duì)應(yīng)當(dāng)前類的對(duì)象加鎖。如果synchronized修飾的是一個(gè)對(duì)象的方法(未用static修飾的方法),則這個(gè)方法在被調(diào)用執(zhí)行前,將把當(dāng)前對(duì)象加鎖。 Synchronized修飾符主要用于多線程共存的程序中的協(xié)調(diào)和同步。 二,訪問控制符。 訪問控制符是一組限定類、域或方法是否可以被程序里的其他部分訪問和調(diào)用的修飾符。類的訪問控制符只有一個(gè)public,域和方法的訪問控制符有四個(gè),分別是public、private、protected、private protected,另外還有一種沒有定義專門的訪問控制符的缺省情況。 1,公有訪問控制符public: Java的類是通過包的概念來(lái)組織的,包氏類的一個(gè)松散的集合。處于同一個(gè)包中的類可以不需要任何說明而方便的互相訪問和引用,而對(duì)于不同包中的類,則不行。但當(dāng)一個(gè)類被聲明為public時(shí),他就具有了被其他包中的類訪問的可能性,只要這些其他包中的類在程序中使用import語(yǔ)句引入public類,就可以訪問和引用這個(gè)類。 類中被設(shè)定為public的方法是這個(gè)類對(duì)外的接口部分,避免了程序的其他部分直接去操作類內(nèi)的數(shù)據(jù),這實(shí)際就是數(shù)據(jù)封裝思想的體現(xiàn)。 每個(gè)Java程序的主類都必須是public類,也是基于相同的原因。 用public修飾的類的域稱為公共域。如果公共域?qū)儆诠差?,則它能被所有的其他類所引用。public修飾符會(huì)造成安全性的數(shù)據(jù)封裝性下降,所以一般應(yīng)減少public域的使用。 2,缺省訪問控制符: 缺省訪問控制權(quán)規(guī)定,該類只能被同一個(gè)包中的類訪問和引用,而不可以被其他包中的類使用,這種訪問特性又稱為包訪問性。 同樣道理,類內(nèi)的域或方法如果美育訪問控制符來(lái)限定,也就具有包訪問性。 簡(jiǎn)單說,定義在同一個(gè)程序中的所有類屬于一個(gè)包。 3,私有訪問控制符private : 用private修飾得域或方法只能被該類自身所訪問和修改,而且不能被任何其他類(包括該類的子類)來(lái)獲取和引用。private修飾符用來(lái)聲明那些類的私有成員,它提供了最高的保護(hù)級(jí)別。 4,保護(hù)訪問控制符protected : 用protected修飾的成員變量可以被三種類所引用:該類自身、與它在同一個(gè)包中的其它類、在其他包中的該類的子類。使用protected修飾符的主要作用是允許其他包中該類的子類來(lái)訪問父類的特定屬性。 5,私有保護(hù)訪問控制符 private protected : 用private protected修飾的成員變量可以被兩種類訪問和引用,一種是該類本身,一種是該類的所有子類。把同一個(gè)包內(nèi)的非子類排除在可訪問的范圍之外,使得成員變量更專于具有明確繼承關(guān)系的類,而不是松散地組合在一起的包。 另記:內(nèi)部類的修飾字還可以是private:即只有外層類的區(qū)域可以訪問。 |