java修飾符1

原-孫衛琴《JAVA面向對象編程》讀書筆記-修飾符

(2007-09-09 16:38:47)
java語言採用訪問權限控制修飾符來控制類及類的方法和變量的訪問權限,從而只向使用者暴露接口,但隱藏實現細節。訪問控制分4種級別:(僅僅適用於類及類的成員,不適用於局部變量,局部變量只能在方法內部被訪問,不能用public,protected,private來修飾)
公開:public,對外公開。
受保護:protected,向子類及同一個包中的類公開。
默認:沒有修飾符,向同一個包中的類公開。
私有:private,只有類本身可以訪問,不對外公開。
成員變量,成員方法和構造方法可以處於4個訪問級別中的一個。
頂層類(非內部類)只可以處於 公開 或 默認的訪問級別。不能用protected和private來修飾。
(修飾頂層類的修飾符包括abstract,public和final,而static,protected和private不能修飾頂層類;成員方法和成員變量可以有多種修飾符,而局部變量只能用final修飾。)
abstract修飾符:
可用於修飾類和成員方法。
抽象類不能被實例化。
抽象方法沒有方法體。抽象方法用來描述系統具有什麼功能,但是不提供具體實現。
它的語法規則如下:
抽象類可以沒有抽象方法。但是包含了抽象方法的類一定是抽象類。(即抽象方法必須是在抽象類中定義。)
沒有抽象構造方法,也沒有抽象靜態方法。
抽象類及抽象方法不能被final,static,private修飾符修飾。(原因:static方法必須被實現,abstract方法沒有方法體,矛盾;final修飾的類不能被繼承,沒有子類,而抽象類必須是被繼承實現的;.....)


final修飾符:
final具有“不可改變”的含義,它可以修飾非抽象類,非抽象成員方法和變量,。
用final修飾的類不能被繼承,沒有子類。
用final修飾的方法不能被子類的方法覆蓋。
用final修飾的變量表示常量,只能賦一次值。
不能用來修飾構造方法。
final修飾的變量必須顯式的初始化。(對於final類型的實例變量,可以在定義變量時,或在構造方法中進行初始化;對於final類型的靜態變量,可以在定義變量時,或在靜態代碼塊中初始化。)
示例:
//final類型的靜態變量的初始化;
public class Sample{
static final int a=1;//定義變量時初始化;
static final int b; //靜態代碼塊中初始化;
static{
b=1;
}
//final類型的實例變量的初始化;
final int d=2; //定義變量時初始化;
final int c;//構造方法中初始化;
Sample(int x){ c=x; }
}

static修飾符
可以修飾類的成員變量,成員方法和代碼塊。
用static修飾的成員變量表示靜態變量,可以直接通過類名來訪問。
用static修飾的成員方法表示靜態方法,可以直接通過類名來訪問。
用static修飾的程序代碼塊表示靜態代碼塊,當java虛擬機加載該類時,就會執行該代碼塊。且只執行一次。
注:被static所修飾的成員變量和成員方法表明被某個類所有,它不依賴於類的特定實例,被類的所有實例所共享。只要這個類被加載,java虛擬機就能根據類名在運行時數據區的方法區找到它們。

類的成員變量分2種:
被static修飾的類的成員變量,叫類變量(靜態變量);
另一種沒有被static修飾的變量,叫實例變量。
類變量(靜態變量)和實例變量的區別:
靜態變量在內存中只有一個拷貝。可以直接通過類名來訪問。
實例變量,每創建一個實例,就會爲實例變量分配一次內存,實例變量可以在內存中有多個拷貝,互不影響。


static方法
因爲靜態方法不需要通過它所屬的類的任何實例就會被調用,因此在靜態方法中不能使用this,super關鍵字;不能直接訪問所屬類的實例變量和實例方法,但是可以直接訪問所屬類的靜態變量和靜態方法;
靜態方法用來表示某個類所特有的功能,這種功能的實現不依賴於類的具體實例,也不依賴於它的子類。因此靜態方法必須被實現。
作爲程序入口的main()方法是靜態方法(因此也符合上述要求)。原因:只要java虛擬機加載了main()所屬的類,就能執行main()方法,而無需先創建這個類的實例。

static代碼塊
不存在於任何方法體中,java虛擬機在加載類時,會依順序,首先執行這些代碼塊。且只執行一次。
通常,類的靜態代碼塊用於初始化類,給類的靜態變量賦初始值,而類的構造方法用於初始化類的實例;


靜態代碼塊和靜態方法一樣,也不能直接訪問類的實例變量和實例方法。而必須通過實例的引用來訪問它們。

備註:使用多個修飾符,順序可以顛倒,但是作爲規範,通常是

訪問控制修飾符-->static/abstract-->其它。

發佈了34 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章