從單文件 HelloWorld.java 走向企業級項目,首要挑戰是如何組織成百上千個類文件。Java package 機制提供了命名空間隔離、訪問控制與物理部署的三位一體解決方案。
package com.vamei.society;
public class Human {
private int height;
public Human(int h) { this.height = h; }
public int getHeight() { return height; }
public void growHeight(int h) { height += h; }
}
命名規範:
com.vamei),全球唯一避免衝突。society、creature、util、service...)。編譯後 Human.class 必須置於目錄結構 com/vamei/society/ 下,類全限定名為 com.vamei.society.Human。不同包可有同名類,JVM 通過全限定名精準識別。
| 修飾符 | 同類 | 同包 | 子類(異包) | 任意處 |
|---|---|---|---|---|
| private | ✓ | ✗ | ✗ | ✗ |
| default(無) | ✓ | ✓ | ✗ | ✗ |
| protected | ✓ | ✓ | ✓ | ✗ |
| public | ✓ | ✓ | ✓ | ✓ |
類若無 public,則為包級可見;同理,成員無修飾符默認包級可見。利用此機制隱藏內部實現類,僅暴露門面接口,是封裝的重要手段。
// 方式一:導入包下所有類(推薦常用類)
import com.vamei.society.*;
public class TestAgain {
public static void main(String[] args) {
Human p = new Human(180); // 簡短名
System.out.println(p.getHeight());
}
}
// 方式二:全限定名(解決同名類衝突、避免導入)
public class TestAgain {
public static void main(String[] args) {
com.vamei.society.Human p = new com.vamei.society.Human(180);
com.vamei.creature.Human beast = new com.vamei.creature.Human(50);
}
}
若包不在當前工作目錄,需指定 -classpath(或 -cp):
# 包根目錄為 /home/vamei/javapackage,工作目錄為 /home/vamei javac -classpath /home/vamei/javapackage:. TestAgain.java java -classpath /home/vamei/javapackage:. TestAgain
長期項目建議配置環境變量 CLASSPATH 或構建工具管理。現代開發強烈推薦 Maven/Gradle,自動管理依賴、編譯輸出目錄、類路徑,彻底告別手動 -cp 痛苦。

Java「一次編譯,到處運行」依賴三大支柱:
對比 C 需針對每平台重新編譯,Java 將移植複雜度前移至 JVM 實現者,應用開發者享受純邏輯移植紅利。
包設計原則:高內聚、低耦合、穩定依賴。業務垂直分層、通用庫水平分層,避免循環依賴。JDK 9+ 模塊系統更強制導出/開放包,編譯期檢查模塊邊界,大型系統治理利器。