首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 包機制深度解析:打包、導入、訪問控制與項目結構最佳實踐

     編輯:Java 相關知識

包的本質:邏輯命名空間 + 物理目錄映射

包解決類名衝突、實現功能模塊化、配合訪問控制封裝內部實現。邏輯上是類名前綴(com.company.module.Class),物理上對應目錄樹(com/company/module/Class.class)。

打包聲明:package 語句

package com.myapp.service.user;  // 必須為源文件第一條非註釋語句
// 每個源文件最多一條 package
  • 命名規範:全小寫、反域名開頭(com.github.user.project)、無關鍵字、無特殊字符。
  • 無 package → 默認包(無名包),不可被有包類引用,僅供臨時測試。

編譯與運行帶包類

JDK 命令行

# 編譯:-d 指定輸出根目錄,自動建包目錄
javac -d ./out src/com/myapp/Main.java

# 運行:從根目錄下用全限定名
java -cp ./out com.myapp.Main

Eclipse / IntelliJ

  • 新建類時填 Package 欄,IDE 自動建目錄、加 package 語句。
  • 源碼目錄標記為 Source Root,輸出目錄標記為 Output。
  • 複製代碼時必須保持包目錄結構,否則報「package does not match」錯誤。

導入:import 語句

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)。
  • 同名類衝突時必須用全限定名或單類導入消歧義。

IDE 優化導入

  • Eclipse: Ctrl+Shift+O (Organize Imports) 自動增刷、轉單類。
  • IntelliJ: Ctrl+Alt+O,設置 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 → 類文檔註釋 → 類聲明。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved