標籤:
存取權限控制
java提供了存取權限修飾詞,以供類庫開發人員向用戶端程式員指明哪些是可用的,哪些是停用。存取權限控制的等級,從最大許可權到最小許可權依次是:public、protected、包存取權限(沒有關鍵字)、private。
包:庫單元 包內有一組類,它們在單一名字空間之下被組織在了一起。如果你嚮導入某個標準庫中的類的話,可以使用import關鍵字。我們之所以要匯入,就是要提供一個管理名字空間的機制。所有類成員的名稱都是彼此分離的。所以具有相同方法的不同類在程式運行時不會出現錯誤的。 由於名字之間的潛在衝突,在java中隊名稱空間進行完全控制並為每個類建立唯一的標識符組合就成為了非常重要的事情。 當編寫一個java原始碼程式時,此檔案通常被稱為
編譯單元(有時也被成為轉譯單元)。每個編譯單元都必須有一個
尾碼名.java。而在編譯單元內則可以有一個
public類,該類的名稱必須與檔案的名稱相同(包括大小寫,但不包括檔案的尾碼名.java)。每個編譯單元只能有一個public類,否則編譯器是不會接受的。如果在該編譯單元之中還有額外的類的話,那麼在包之外的世界是無法看到這些類的,因為它們不是public類型。
程式碼群組織:編譯一個.java檔案時,在.java檔案中的每一個類都會有一個輸出檔案,而該輸出檔案的名稱與.java檔案中的每個類的名稱相同,只是多了一個尾碼名.class。在編譯少量的.java檔案之後,會得到大量的.class檔案
。java可運行程式是一組可以打包並壓縮為一個java文檔檔案(JAR,使用Java的jar文檔產生器)的.class檔案。
java解譯器負責這些檔案的尋找、裝載和解釋。
類庫實際上是一組類檔案。其中每個檔案都有一個public類,以及任意數量的非public類,因此每個檔案都有一個構件。如果希望這些構建(每一個都有它們獨立的.java和.class檔案)從屬於同一個群組,就可以使用關鍵字package。
如果使用package,它必須是除了注釋之外程式開頭的第一句代碼。
建立獨一無二的包名:利用作業系統的
層次化的檔案結構來解決java中的混亂問題。
package名稱的第一部分是類的建立者的反順序的Internet網域名稱。第二部分是把package名稱分解為你機器上的一個目錄。所以當java程式運行並且需要載入.class檔案的時候,它就可以確定.class檔案在目錄上所處的位置。
java解譯器運行過程:
衝突:如果將兩個相同名稱的類庫以萬用字元“*”全部匯入時,可能會出現有兩個類庫中有一樣類出現,這就可能存在這潛在衝突。此時必須明確指出執行個體化類的類庫。或者在匯入類庫的時候,只選用自己需要的類,不使用萬用字元。
java存取權限修飾詞
public、protected和private這幾個java存取權限修飾詞在使用時,是置於類中每個成員的定義之前的,無論它是一個域還是一個方法。
每個許可權修飾符僅控制它修飾的特定定義的訪問權。
如果不提供任何存取權限修飾詞, 則意味著它是“包存取權限”。
包存取權限:預設存取權限沒有任何關鍵字。這就意味著當前包中的所有其他類對那個成員都有存取權限,但對於這個包之外的所有類,這個成員就是private。
經由包存取權限,處於同一編譯單元中的所有類之間是自動可訪問的。 包存取權限允許將包內所有相關的類組合起來,以使它們彼此之間可以輕鬆地相互作用。
public:介面存取權限
使用關鍵字public,就意味著public之後緊跟著的成員聲明自己對每一個人都是可用的。
預設包:同處於相同的目錄並且沒有給自己設定任何的包名稱之間的兩個類是可以相互訪問的,因為java將這樣的檔案自動看成是隸屬於該目錄的預設包。於是它們為該目錄中的所有其他的檔案都提供了包存取權限。
private:你無法訪問
除了包含該成員的類之外,其他任何類都無法訪問這個成員。private允許你隨意改變該成員,而不必考慮這樣做會影響包內其他的類。對private的使用是十分重要的,特別是在多線程環境下。 任何可以肯定只是該類的一個“助手”方法的方法,都可以將它指定為private,以確保不會再包內的其他地方誤用到它,於是也就防止你去改變或刪除這個方法。
protected:繼承存取權限
關鍵字protected處理的是
繼承的概念,通過繼承可以利用一個現有類(基類)將新成員添加到該現有類中而不必碰該現有類。愛可以改變該類的現有成員的行為。用extends繼承一個現有類。 希望有特定成員,把對它的存取權限賦予衍生類別而不是所有類。就可以使用protected來完成這一工作。protected也提供包存取權限,也就是說,相同包內的其他類可以訪問protected。
介面和實現
存取權限的控制常被稱為是
具體實現的隱藏。
把資料和方法封裝進類中,以及具體實現的隱藏,常共同被稱作是
封裝。其結果是一個同時帶有特徵和行為的資料類型。 出於兩個很重要的原因,存取權限控制將許可權的邊界劃在了資料類型的內部。1.設定用戶端程式員可以使用和不可以使用的界限。在結構中建立自己的內部機制,而不必擔心訪問出錯。2.將介面和具體實現進行分離。 將介面展示給某個類的任務是由
類瀏覽器來完成的,
類的存取權限
在java中,存取權限修飾詞也可以用來確定庫中的哪些類對該庫的使用者是可用的。
類即不可以是private的(這樣會使得除了該類之外,其他任何類都不可以訪問它);也不可以是protected的。所以對於類的存取權限,只能是包存取權限或是public。如果不希望任何人對該類有存取權限,可以把所有的構造器都指定為private,從而阻止了任何人建立該類的對象,但是有一個例外,就是你在該類的static成員內部可以建立。
Java存取權限控制