Java應用是由若干個類組成的。但是從邏輯上考慮,這些類解決的問題都是不同的。 比如某些類解決了數據庫訪問問題,某些類解決了安全控制問題…就如同我們計算 機硬盤上的文檔,我們不會把它們都雜亂無章的放在某個硬盤的根目錄下,而是按照個人 習慣進行分類,放在不同的文件夾下。Java應用中的類也一樣,也應該按照邏輯進行分類 ,放在不同的目錄下,這就是包的概念。
雖然Java語法本身,不要求必須給某個類顯式指明包名,可以使用默認包。但是,在 開發Java項目的過程中,任何類都應該有包。對一個類指定包名,使用如下語法即可:
package com.csst.db;
public class CustomerDAO {
}
只要指定了package,編譯CustomerDAO後,class文件就將存在於com/csst/db文件夾 下。從物理上講,包其實就是文件夾。但是需要注意的是:只要一個類指定了包名,那麼 包名就是名字空間的一部分,也就是說,CustomerDAO.class的名字其實是 com.csst.db.CustomerDAO,而不是CustomerDAO。正因為如此,使用該類,就得指定完整 的名字,如:
package com.csst.service;
class CustomerService {
private com.csst.db.CustomerDAO dao;
注:如果CustomerService的包名與CustomerDAO包名相同,那麼不需要指定包名。
而在實際應用中,沒有人願意寫這樣冗長的名字,一般都是使用import關鍵字,把不 同包的類進行導入。
package com.csst.service;
import com.csst.db.CustomerDAO;
public class CustomerService {
private CustomerDAO dao;
}
注:如果需要同時使用com.csst.db包中很多類,可以使用import com.csst.db.*語句 導入多個類。
總之,包就是從邏輯上將類進行分離。當Java類有了Java類中的包後,不僅能很好的 避免重名問題(包名就是類名的一部分,保證包名不同較容易),而且還能很好得使用 Java語言的修飾符,進行權限控制。