Java 專案包含大量類別,若全部放在預設套件(無 package 宣告)會導致:
protected、default)進行權限控制package com.csst.db; // 必須為源碼第一行非註解語句
public class CustomerDAO { }
.class 檔案置於 com/csst/db/ 目錄樹。com.csst.db.CustomerDAO。package com.csst.service;
class CustomerService {
private com.csst.db.CustomerDAO dao; // 每次皆需寫全名
}
package com.csst.service;
import com.csst.db.CustomerDAO;
public class CustomerService {
private CustomerDAO dao; // 簡潔
}
import com.csst.db.*; // 匯入該套件所有類別
缺點:編譯速度稍慢、易造成名稱衝突、IDE 自動完成雜訊多。
| 層級 | 慣例 | 範例 | ||
|---|---|---|---|---|
| 頂層 | 反轉公司網域 | com.csst、org.apache、io.github | ||
| 功能模組 | 小寫單詞 | db、service、web、util | ||
| 子模組 | 小寫單詞 | dao、controller、model |
| 修飾詞 | 同類 | 同套件 | 子類(不同套件) | 無關類(不同套件) |
|---|---|---|---|---|
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| default (package-private) | ✓ | ✓ | ✗ | ✗ |
| private | ✓ | ✗ | ✗ | ✗ |
善用套件劃分 + default/protected,可實現「模組內可見、模組外不可見」的封裝邊界。
# 編譯
javac -d ./classes -sourcepath ./src com/csst/db/CustomerDAO.java
# 執行 (需在 classes 根目錄)
java com.csst.service.CustomerService
套件是 Java 管理大型程式碼庫的核心機制。遵循「網域反轉 + 功能模組」命名慣例,配合 import 與存取修飾詞,即可構建清晰、可維護、可擴充的專案架構。