《Java編程思想》筆記6.訪問權限控制


點擊進入個人博客

6.1包:庫單元

import java.util.ArrayList;
import java.util.*;
  • 當編寫一個Java源代碼文件(編譯單元)時,每一個編譯單元必須有一個後綴.java,而在編譯單元內則能夠有至多一個public類,該類名必須和文件名相同。
  • 若是編譯單元內還有其餘的類,那麼在包以外是不可見的。

6.1.1 代碼組織

  • 當編譯一個.java文件時,在.java文件中的每一個類都會有一個輸出文件,而該輸出文件的名稱與.java文件中的每一個類名稱相同,只是後綴名改成.class。
  • Java可運行程序是一組能夠打包並壓縮爲一個Java文檔文件(JAR)的.class文件,Java解釋器負責這些文件的查找、狀態和解釋。
  • package語句必須是文件中除註釋之外的第一句程序代碼。
  • Java包命名規範使用小寫字母。
  • packageimport關鍵字容許你作的,是將單一的全局名字空間分割開,防止名稱衝突。

6.1.2 建立獨一無二的包名

  • package名稱的第一部分是類的建立者的反順序域名。
  • package名稱分解爲你機器的一個目錄。

Java解釋器的執行過程:java

  1. 找到環境變量CLASSPATH,CLASSPATH包含一個或多個目錄,用於查找.class文件的根目錄。
  2. 從根目錄開始,解釋器包的名稱並將每個.替換成\/
  3. 把CLASSPATH和包路徑拼接獲得最終目錄,並查找.class文件。
  • Sun公司將Java2中的JDK改造的更聰明瞭一些,未設置CLASSPATH也能夠編譯並運行Java程序。
  • 不要錯誤的任務Java老是將當前目錄視做查找行爲的起點,CLASSPATH中的.表示當前目錄
  • 引入兩個名稱相同的類會引發衝突,因此儘可能不要用import *的方式

6.1.3 定製工具庫

程序員

6.1.4 用import改變行爲

Java沒有C的條件編譯功能,該功能可使你沒必要更改任何程序代碼,就可以切換開關併產生不一樣的行爲。(Java去掉此功能多是由於C在絕大數狀況下是用此功能來解決跨平臺的問題的,即程序代碼的不一樣部分是根據不一樣的平臺來編譯的。因爲Java自己能夠自動跨越不一樣的平臺,所以這個功能對Java而言就沒有必要了。)
然而,條件編譯還有其餘一些有價值的用途。調試就是一個很常見的用途。調試功能在開發過程當中是開啓的,而在發佈的產品中是禁用的。能夠經過修改被導入的package的方法來實現這一目的,修改的方法是將你程序中的代碼從調試版改成發佈版。這樣的技術適用於任何種類的條件代碼。編程

6.1.5 對使用包的忠告

  • 包必須位於其名稱所指定的目錄中,該目錄必須是在以CLASSPATH開始的目錄中能找到的。
  • 編譯後的代碼一般放在與源代碼不一樣的目錄中,必須保證JVM(在《Java編程思想》第四版中,此處被錯誤的寫成類JVN!!!)使用CLASSPATH能夠找到該路徑。

6.2Java訪問權限修飾符

publicprotected包訪問權限privateide

取得對某成員(屬性和方法)的實現方法有下面四種狀況:
  1. 權限設置爲public。
  2. 默認包訪問權限,在同一包中的其餘類,能夠訪問。
  3. 權限設置爲public或者protected,經過繼承的子類能夠訪問。
  4. 設置爲private,提供訪問器和變異器方法(get/set)

6.2.1 包訪問權限

  • 若是不提供訪問權限關鍵詞,則意味是「包訪問權限(也被稱做friendly)」,即默認訪問權限。
  • 包訪問權限:同一個包中的全部其餘類對那個成員有訪問權限,包以外的沒法訪問。
  • 包訪問權限爲把類聚在一個包中的作法提供了意義和理由

6.2.2 public:接口訪問權限

  • 使用public關鍵字,意味着被它修飾的成員對全部類可見。

6.2.3 private:沒法訪問

  • private的意思是,除了包含該成員的類外,其餘任何類都沒法訪問這個成員。
  • 若是默認構造方法被private修飾,那麼這個類沒法被繼承。

6.2.4 protected:繼承訪問權限

  • 基類的建立者但願某些特定成員,把它的訪問權限賦予派生類也不是全部類。
  • protected也提供包訪問權限

6.3 接口和實現

  • 訪問權限的控制一般被稱爲是具體實現的隱藏
  • 封裝:把數據和方法包進類中,以及其具體實現的隱藏共同稱爲封裝
  • 將接口和實現分離

6.4 類的訪問權限

  • 每一個編譯單元最多一個public
  • public類名必須和文件名徹底相同
  • 編譯單元內能夠沒有public類,此時能夠隨意命名文件名,但這種方法不多用。
  • 類的訪問權限只有兩種(內部類除外):public包訪問權限
  • 若是不但願其餘人對該類擁有訪問權限,能夠把構造器設置爲private單例模式中會用這種設置。

6.5 總結

控制對成員的訪問權限有兩個緣由
  • 第一個緣由:要設定客戶端程序員可使用和不可使用的界限。
  • 第二個緣由,也是最重要的緣由,是爲了讓類庫設計者能夠更改類的工做方式,而不會影響對客戶端程序員產生重大影響。
相關文章
相關標籤/搜索