Java 標準庫(JDK API)龐大而精密,掌握核心包結構、關鍵類職責、常用 API 組合是高效開發的前提。本文按功能域梳理 java.lang、java.util、java.io、java.nio、java.net、java.time、java.util.concurrent 七大核心包,附高頻類速查表與避坑指南。
一、java.lang:語言基石,無需導入自動可用
| 類/介面 | 核心職責 | 高頻方法/最佳實踐 |
Object | 所有類根類 | equals/hashCode/toString 必須成對重寫;wait/notify 同步基石 |
String | 不可變字符序列 | 拼接用 StringBuilder;池化 intern() 謹慎用 |
StringBuilder/Buffer | 可變字符序列 | 單線程 Builder,多線程 Buffer |
Math/StrictMath | 數學運算 | random()、round()、hypot() 避免溢位 |
System | 系統屬性/IO/GC | currentTimeMillis/nanoTime、arraycopy 高效複製 |
Thread/Runnable | 線程基礎 | 優先用線程池;ThreadLocal 變量隔離 |
Class | 運行時類型元數據 | 反射入口;forName 載入類 |
Throwable/Exception/Error | 異常體系根 | 受檢 vs 非受檢選型;異常鏈保留 |
Comparable/Comparator | 排序契約 | compareTo 與 equals 一致性 |
Enum | 枚舉類型基類 | 單例模式最佳實現;values() 遍歷 |
二、java.util:集合框架、工具類、日期舊 API
1. 集合框架核心介面與實現選型
Collection
├─ List (有序、可重複) → ArrayList(隨機訪問)、LinkedList(首尾增刪)、Vector(舊、同步)
├─ Set (無序、不可重複) → HashSet(無序)、LinkedHashSet(插入序)、TreeSet(自然序/Comparator)
└─ Queue (佇列) → ArrayDeque(雙端)、PriorityQueue(優先級)、LinkedList
Map (鍵值對)
├─ HashMap (無序、O(1)) → JDK 8 紅黑樹優化碰撞
├─ LinkedHashMap (插入/訪問序) → LRU 快取基石
├─ TreeMap (有序、紅黑樹) → 範圍查詢、floor/ceiling
└─ ConcurrentHashMap (高併發) → JDK 8 CAS+synchronized 分段鎖
2. 核心工具類
Collections:sort/shuffle/unmodifiableList/singletonList/emptyList、binarySearch、frequency。
Arrays:sort/parallelSort/stream/toString/deepEquals/copyOf。
Objects (JDK 7+):requireNonNull/equals/hash/isNull/nonNull/toString 防空神器。
Optional (JDK 8+):of/empty/ofNullable/ifPresent/orElse/orElseGet/orElseThrow/map/flatMap/filter — 消除 NPE,函數式風格。
3. 日期舊 API(維護項目常見)
Date:毫秒時間戳,可變,多方法已棄用。
Calendar:getInstance/add/set/get,月份 0-based,線程不安全。
SimpleDateFormat:線程不安全,多線程必用 ThreadLocal 或 JDK 8 DateTimeFormatter。
三、java.io:傳統阻塞 IO,流/裝飾器模式
| 流類型 | 抽象基類 | 典型實現 | 用途 |
| 字節輸入 | InputStream | FileInputStream、ByteArrayInputStream、BufferedInputStream | 二進制讀取 |
| 字節輸出 | OutputStream | FileOutputStream、ByteArrayOutputStream、BufferedOutputStream | 二進制寫入 |
| 字符輸入 | Reader | FileReader、InputStreamReader(字節轉字符)、BufferedReader | 文本讀取 |
| 字符輸出 | Writer | FileWriter、OutputStreamWriter、BufferedWriter、PrintWriter | 文本寫入 |
裝飾器鏈標準姿勢:new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")) — 內到外:源 → 轉碼 → 緩衝。
四、java.nio:非阻塞 IO、緩衝區、通道、選擇器
- Buffer:
ByteBuffer/CharBuffer/IntBuffer... — flip/clear/compact/remaining/limit/position 狀態機,allocateDirect 堆外內存零拷貝。
- Channel:
FileChannel/SocketChannel/ServerSocketChannel/DatagramChannel — 雙向、可非阻塞、支援分散/聚集讀寫。
- Selector:
select()/selectedKeys() — 多路復用核心,單線程管理成千上萬連接。
- Path/Files (JDK 7+):
Paths.get/Files.readAllLines/walk/copy/move/delete/attributes — 現代文件系統 API,替代 File。
五、java.net:網絡編程基礎
InetAddress:IP 解析、getByName/getAllByName/isReachable。
URL/URI:資源定位/標識,openStream/openConnection。
HttpURLConnection:HTTP 客戶端基礎,setRequestMethod/setDoOutput/getInputStream。
Socket/ServerSocket:TCP 阻塞套接字,accept/getInputStream/getOutputStream。
DatagramSocket/DatagramPacket:UDP 無連接。
六、java.time (JDK 8+):現代日期時間 API,不可變、線程安全、領域驅動設計
| 類 | 語義 | 關鍵方法 |
Instant | 時間線上的瞬間 (UTC) | now()/toEpochMilli()/plusSeconds() |
LocalDate/Time/DateTime | 無時區日期/時間/日期時間 | now()/of()/plusDays()/format() |
ZonedDateTime | 帶時區日期時間 | ofInstant/withZoneSameInstant |
Duration/Period | 時間量/日期量 | between()/toHours()/toDays() |
DateTimeFormatter | 格式化/解析,線程安全 | ofPattern/ISO_LOCAL_DATE |
ZoneId/ZoneOffset | 時區/偏移量 | systemDefault()/of("Asia/Shanghai") |
遷移鐵律:新代碼全面使用 java.time,舊代碼逐步替換;Date.toInstant()、Instant.atZone() 雙向轉換。
七、java.util.concurrent (JUC):高併發工具箱
- 執行器:
ExecutorService/ThreadPoolExecutor/ScheduledThreadPoolExecutor/ForkJoinPool。
- 同步器:
CountDownLatch/CyclicBarrier/Semaphore/Phaser/Exchanger。
- 鎖:
ReentrantLock/ReadWriteLock/StampedLock/Condition。
- 原子類:
AtomicInteger/LongAdder/LongAccumulator/AtomicReference。
- 併發集合:
ConcurrentHashMap/CopyOnWriteArrayList/ConcurrentLinkedQueue/BlockingQueue(ArrayBlockingQueue/LinkedBlockingQueue)。
- Future/CompletableFuture:異步編程核心,
supplyAsync/thenApply/thenCompose/allOf/anyOf/exceptionally。
- 並行流:
collection.parallelStream()、Arrays.parallelSort() — ForkJoinPool 共用池,CPU 密集型慎用。
八、包導入最佳實踐
- 顯式導入單類:
import java.util.List; — 避免 import java.util.*; 命名衝突、編譯緩慢、可讀性差。
- 靜態導入常量/工具方法:
import static java.util.Collections.emptyList; — 僅用於極高頻、無歧義場景。
- 模塊化:JDK 9+
module-info.java 聲明 requires java.base; exports com.my.app; — 封裝內部 API。
Java 核心類庫是開發者的兵器庫。建議:按功能域建立心智索引,遇到問題先查對應包的「高頻類速查表」,再翻官方文檔。內化本文七大包核心類職責,能讓你在茫茫 API 海中精準定位、高效解決問題。
- 上一篇文章: Java 抽象類深度解析:定義規範、共享實現、模板方法模式與實例化陷阱
- 下一篇文章: Java 線程同步與線程間通信深度解析:synchronized、Lock、wait/notify、Condition、生產者消費者模式
Copyright ©
程式碼之家 All Rights Reserved