| 類型 | 語法 | 範例 | 別名 |
|---|---|---|---|
| 單類型匯入 | import package.ClassName; | import java.io.File; | Single-Type Import |
| 按需匯入 | import package.*; | import java.util.*; | Type-Import-on-Demand |
import java.io.File;
// 編譯器直接查找:bootstrap/extension/user classpath 下的 java/io/File.class
// 一次查找,確定唯一
package com.example;
import java.io.*;
import java.util.*;
// 當代碼使用 File 類時,編譯器按優先級搜索:
// 1. 無包名類 → File (無 package 宣告)
// 2. 當前包 → com.example.File
// 3. java.lang.* → java.lang.File (自動匯入)
// 4. java.io.* → java.io.File ← 找到
// 5. java.util.* → java.util.File (繼續搜索!)
// 6. 其他匯入包...
// 必須搜完所有可能性,確認無衝突才算完成
import java.awt.*;
import java.util.*;
// 使用 List 時:
// java.awt.List (GUI 元件) vs java.util.List (集合介面)
// 編譯器發現兩個候選 → 編譯錯誤:"reference to List is ambiguous"
// 必須改用單類型匯入或完整限定名
| 階段 | 單類型 | 按需匯入 |
|---|---|---|
| 編譯速度 | 快(精確定位) | 慢(排列組合搜索、衝突檢測) |
| 類檔案大小 | 相同 | 相同 |
| 執行速度 | 相同 | 相同 |
| JVM 載入 | 相同 | 相同 |
結論:按需匯入不影響執行效能,僅降低編譯速度(大型專案明顯)。
// java.util.ArrayList 開頭
package java.util;
import java.io.Serializable;
import java.lang.Comparable;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.RandomAccess;
// 明確列出每個依賴
java.awt.List vs java.util.List、java.sql.Date vs java.util.Dateimport 區塊較長java.awt.*, java.sql.*java.sql.Date)直接寫全名import static java.util.Collections.*; 僅用於普遍常數/工具方法// module-info.java
module com.example {
requires java.logging; // 模組級依賴
requires transitive java.sql; // 可傳遞依賴
// 匯入仍需在 .java 中宣告
// 但模組未導出的包無法匯入(強封裝)
}
單類型匯入是專業 Java 開發標準:編譯快、無衝突、意圖明確。按需匯入僅適合快速原型、腳本、教學示範。現代 IDE 完全自動化匯入管理,開發者應配置專案統一風格,專注於模組依賴設計而非匯入語法細節。