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

Java 存取控制與套件機制:從權限矩陣到模組化實戰

     編輯:Java 程式設計入門

四大存取修飾詞權限完整對照

Java 提供 public、protected、default (package-private)、private 四層級可見性,橫跨「同一類別」「同一套件」「不同套件子類別」「不同套件非子類別」四維度:

存取位置publicprotecteddefaultprivate
同一類別內✅✅✅✅
同一套件其他類別✅✅✅❌
不同套件子類別✅✅❌❌
不同套件非子類別✅❌❌❌

關鍵規則補充

  • default 無關鍵字,類別/成員未加修飾詞即為套件私有。
  • 子類別覆寫父類別方法時,存取層級只能放寬不能收窄(如父 protected → 子 public 合法,反之非法)。
  • 實務慣例:欄位私有化,提供 public getter/setter,在存取器中加入驗證、日誌、延遲初始化等邏輯,保護不變條件。

套件機制:邏輯分層與命名空間管理

命名慣例與結構

  • 套件名全小寫、反向網域名:com.company.project.module
  • 類別名 PascalCase:UserService、OrderController
  • 編譯單元 .java 首行必須為 package 宣告,缺省套件僅供測試臨時使用。

Hello Package 實戰範例

// 檔案路徑:src/testPackage/Test.java
package testPackage;

public class Test {
    public static void main(String[] args) {
        mNode node = new mNode();  // 同套件類別直接可見
        node.print("hello");
    }
}

編譯部署指令:

# 自動依套件結構產生目錄並輸出 class 檔
javac -d . Test.java

# 從套件根目錄執行(完整限定類別名)
java testPackage.Test

套件三大核心價值

  1. 邏輯組織:將相關類別歸類,對應目錄樹結構,專案規模擴大時仍清晰可控。
  2. 命名隔離:不同套件可有同名類別(如 java.util.Date vs java.sql.Date),避免全域命名空間汙染。
  3. 存取保護:配合 default/protected 實現「套件內可見、對外隱藏」的封裝邊界。

import 機制深度解析

三種匯入模式

語法語意效能影響適用場景
import java.util.Vector;單一類別匯入編譯期解析,零執行期成本精確控制、避免命名衝突
import java.awt.*;套件下所有 public 類別同單一匯入,不會載入未使用類別大量使用該套件核心類別
import static java.lang.Math.*;靜態匯入(JDK 5+)同單一匯入常數/工具方法頻繁呼叫

常見誤區與限制

  • ❌ import java.awt.F*; 通配符僅能匹配完整類別名,不支援前綴匹配。
  • ❌ import java.*; 無法遞迴匯入子套件,java.util 需單獨匯入。
  • ✅ import 僅告知編譯器「去哪裡找型別定義」,不會 將位元組碼內嵌至當前類別,不增加 class 檔體積。
  • ✅ 匯入順序:package → import → 類別定義。

套件中類別的四種使用方式

  1. java.lang 隱性匯入:String、System、Thread、Exception 等核心類別無需 import 直接使用。
  2. 完整限定名稱:java.awt.Font font = new java.awt.Font(...); 適用於偶爾使用、避免命名衝突。
  3. import 單一/整包匯入:頻繁使用時提升可讀性,import java.util.*;。
  4. 衝突時強制限定名稱:java.util.Date vs java.sql.Date 同時出現時,必須寫全名區分。

進階:模組系統 (JDK 9+)

module-info.java 宣告模組依賴、導出套件、開放反射存取,實現強封裝:

module com.myapp.core {
    requires java.sql;
    requires transitive java.logging;
    exports com.myapp.core.api;
    opens com.myapp.core.internal to com.myapp.plugins;
}

模組系統將「套件可見性」提升為「模組可見性」,解決傳統 Classpath 地獄與內部 API 洩漏問題,大型專案強烈建議遷移。

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