4.7 一文帶你搞懂java包package的使用


1.什麼是包?

  • Java 允許使用包(package> 將類組織起來。藉助於包可以方便地組織自己的代碼,並將 自己的代碼與別人提供的代碼庫分開管理。
  • 標準的 Java 類庫分佈在多個包中,包括java.lang、java.util 和java.net 等。標準的 Java 包具有一個層次結構。如同硬盤的目錄嵌套一樣,也可以使用嵌套層次組織包。所有標準的 Java 包都處於java 和javax 包層次中。
  • 使用包的主要原因是確保類名的唯一性。假如兩個程序員不約而同地建立了 Employee 類。只要將這些類放置在不同的包中, 就不會產生衝突。
  • 事實上,爲了保證包名的絕對 唯一性, Sun 公司建議將公司的因特網域名(這顯然是獨一無二的)以逆序的形式作爲包 名,並且對於不同的項目使用不同的子包。例如, horstmann.com 是本書作者之一註冊的域 名。逆序形式爲 com.horstmann。這個包還可以被進一步地劃分成子包, 如 com.horstmann. corejava。
  • 從編譯器的角度來看, 嵌套的包之間沒有任何關係。例如,java.util 包與java.util.jar 包 毫無關係。每一個都擁有獨立的類集合

2.類的導入—import類或包

  • 一個類可以使用所屬包中的所有類, 以及其他包中的公有類(public class)。
  • 在包中定位類是編譯器 ( compiler) 的工作。類文件中的字節碼肯定使用完整的包名來引 用其他類。

我們可以採用兩種方式訪問另一個包中的公有類:

  • 第一種方式是在每個類名之前添加完整的包名。 例如:
    java.tiie.LocalDate today = java.tine.LocalDate.now();
  • 第二種更簡單且更常用的方式是使用import語句。
    import 語句是一種引用包含在包中的類的簡明描述
    一旦使用了 import 語句,在使用類時,就不必寫出包的全名了。
    可以使用 import 語句導人一個特定的類或者整個包。
    import 語句應該位於源文件的頂部 (但位於 package語句的後面)
    例如, 可以使用下面這條語句導人 java.util 包中所有的類
    import java.util.*;
    然後, 就可以使用: LocalDate today = LocalDate.now();而無須在前面加上包前綴
    還可以導人一個包中的特定類import java.time.LocalDate;
  • 需要注意的是, 只能使用星號() 導入一個包, 而不能使用 import java. 或 importjava.*.*導入以 java 爲前綴的所有包。
  • 在大多數情況下, 只導入所需的包, 並不必過多地理睬它們。但在發生命名衝突的時 候,就不能不注意包的名字了。
    例如,java.util 和java.sql 包都有日期( Date) 類。如果在程 序中導入了這兩個包:
    在這裏插入圖片描述
  • 此時編譯器無法確定程序使用的是哪一個 Date 類。可以採用增加一個特定的 import 語句來 解決這個問題:
    在這裏插入圖片描述
  • 如果這兩個 Date 類都需要使用,又該怎麼辦呢? 答案是,在每個類名的前面加上完整的 包名。 在這裏插入圖片描述

3.靜態導入—靜態方法&靜態域

-import 語句不僅可以導人類,還增加了導人靜態方法和靜態域的功能。
在這裏插入圖片描述

4. 將類放入包中—聲明package

  • 要想將一個類放人包中, 就必須將包的名字放在源文件的開頭,包中定義類的代碼之 前。
  • 將包中的文件放到與完整的包名匹配的子目錄中
  • 編譯器將類文件class也放在相同的目錄結構中(IDE中可能有所不同)在這裏插入圖片描述
    在這裏插入圖片描述
  • 如果沒有在源文件中放置 package語句, 這個源文件中的類就被放置在一個默認包 ( defaulf package) 中。默認包是一個沒有名字的包在這裏插入圖片描述
  • 編譯器對文件 (帶有文件分隔符’/'和擴展名 .java 的文件)進行操作。
  • Java 解 釋器加載類(帶有 . 分隔符)。
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 編譯器在編譯源文件的時候不檢查目錄結構

例如,假定有一個源文件開頭有下 列語句:package con.myconpany;
即使這個源文件沒有在子目錄 com/mycompany 下, 也可以進行編譯。
如果它不依賴 於其他包, 就不會出現編譯錯誤。但是, 最終的程序將無法運行, 除非先將所有類文件 移到正確的位置上。
如果包與目錄不匹配, 虛擬機就找不到類

5.包的作用域—private&public

  • 標記爲public 的部分可以被任意的類使 用;
  • 標記爲private 的部分只能被定義它們的類使用。
  • 如果沒有指定 public 或 private, 這個部 分(類、方法或變量)可以被同一個包中的所有方法訪問
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章