包是 Java 組織代碼、避免命名衝突、實現訪問控制的核心機制。本文通過完整的目錄結構演示、編譯運行命令、跨包訪問實例,徹底講透包的創建、導入與權限邊界。
java.lang、java.util 等皆為層次化包結構。com.company.module.ClassName。com.iotek.entity。com.google、org.apache)。
D:\javastudy\package\ ├── com\iotek\entity\Dog.java └── com\iotek\test\DogTest.java
package com.iotek.entity;
public class Dog {
public String name; // 必須 public,否則跨包不可見
public int age;
public void show() {
System.out.println(name + "------" + age);
}
}
package com.iotek.test;
import com.iotek.entity.Dog; // 導入具體類
public class DogTest {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "旺財";
dog.age = 5;
dog.show();
}
}
# 進入 package 父目錄 D:\javastudy\package javac -d . com\iotek\entity\Dog.java javac -d . com\iotek\test\DogTest.java java com.iotek.test.DogTest
-d . 表示編譯輸出到當前目錄,自動生成包層級目錄結構。
| 修飾符 | 同包類 | 不同包子類 | 不同包非子類 |
|---|---|---|---|
public | ✓ | ✓ | ✓ |
protected | ✓ | ✓ | ✗ |
| 默認 | ✓ | ✗ | ✗ |
private | ✓ | ✗ | ✗ |
實驗證明:Dog 中 name 若無 public,DogTest 編譯報錯「不可見」。
com.iotek.entity.Dog dog = new com.iotek.entity.Dog(); —— 臨時用、避免衝突。import com.iotek.entity.Dog; —— 最常用、可讀性高。import com.iotek.entity.*; —— 慎用,易引入無關類。
javac -d 自動輸出。public 類與成員,或使用繼承配合 protected。public 暴露面。
掌握包機制,是從「寫類」進階到「架構項目」的必經之路。