包解決類名衝突、實現功能模塊化、配合訪問控制封裝內部實現。邏輯上是類名前綴(com.company.module.Class),物理上對應目錄樹(com/company/module/Class.class)。
package com.myapp.service.user; // 必須為源文件第一條非註釋語句
// 每個源文件最多一條 package
com.github.user.project)、無關鍵字、無特殊字符。package → 默認包(無名包),不可被有包類引用,僅供臨時測試。# 編譯:-d 指定輸出根目錄,自動建包目錄
javac -d ./out src/com/myapp/Main.java
# 運行:從根目錄下用全限定名
java -cp ./out com.myapp.Main
package 語句。package com.myapp.service;
import java.util.List; // 單類導入(推薦,清晰依賴)
import java.util.*; // 通配符導入(編譯期展開,不增加運行開銷)
import static java.lang.Math.*; // 靜態導入(JDK 5+),直接用 PI, max()
package 之後,類聲明之前。import 不遞歸導入子包(import a.* 不含 a.b)。Settings → Editor → General → Auto Import 開啟自動優化。| 修飾符 | 同類 | 同包 | 子類(異包) | 非子類(異包) |
|---|---|---|---|---|
public | ✓ | ✓ | ✓ | ✓ |
protected | ✓ | ✓ | ✓ | ✗ |
default(無) | ✓ | ✓ | ✗ | ✗ |
private | ✓ | ✗ | ✗ | ✗ |
// 1. 實體類:字段 private,提供公共 getter/setter(含校驗)
public class Student {
private int age;
public int getAge() { return age; }
public void setAge(int age) {
if (age < 0) throw new IllegalArgumentException();
this.age = age;
}
}
// 2. 工具類:構造器 private,方法 static,防實例化
public final class MathUtils {
private MathUtils() {} // 防 new、防繼承
public static int max(int a, int b) { return a > b ? a : b; }
}
// 3. 包內實現類:default 類,包外不可見,配合公共介面
// com.myapp.dao.UserDao.java (public interface)
// com.myapp.dao.impl.UserDaoImpl.java (default class)
com.myapp
├── config # 配置類
├── controller # Web 控制層
├── service # 業務邏輯層
│ ├── impl # 服務實現
│ └── dto # 數據傳輸對象
├── repository # 數據訪問層
│ ├── entity # 實體類
│ └── mapper # MyBatis Mapper
├── domain # 領域模型(核心業務對象)
├── common # 通用工具、常量、異常
│ ├── util
│ ├── constant
│ └── exception
└── infrastructure # 基礎設施(第三方集成、MQ、緩存封裝)
myapp-parent
├── myapp-api # 公共介面、DTO、常量(極薄,被其它模塊依賴)
├── myapp-core # 核心業務邏輯
├── myapp-web # Web 端
├── myapp-admin # 後台端
└── myapp-infra # 基礎設施實現
/*
* Copyright (c) 2024 MyCompany. All rights reserved.
*/
package com.myapp.service.user;
import com.myapp.common.util.Validator;
import com.myapp.domain.User;
/**
* 用戶服務實現類
* @author ZhangSan
* @since 1.0.0
*/
public class UserServiceImpl implements UserService {
// 字段、構造器、方法...
}
JDK 源碼(src.zip)即遵循此結構:版權註釋 → package → import → 類文檔註釋 → 類聲明。