歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java訪問權限控制

Java訪問權限控制

日期:2017/3/1 9:25:47   编辑:Linux編程

訪問權限控制

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成員內部可以創建。

Copyright © Linux教程網 All Rights Reserved