Java 標準庫龐大,但實際開發中高頻使用的核心類相對固定。本文精選 10 個最基礎、最常用的類,從設計定位、核心方法到實戰場景進行深度解析,助你建立扎實的 Java 核心知識體系。
1. java.lang.String —— 字符串王者
- 定位:不可變字符序列,所有字符串字面值均為 String 實例。
- 核心特性:final 類、char[] 底層存儲(Java 9+ 為 byte[] + coder)、常量池優化。
- 高頻方法:
split()、substring()、format()、join()(Java 8+)、strip()(Java 11+)。
- 避坑指南:拼接用 StringBuilder;比較用
equals() 而非 ==;注意 substring 共享底層數組導致內存洩漏(Java 7+ 已修復)。
2. java.lang.System —— 系統級工具箱
- 定位:final 類,不可實例化,提供標準輸入/輸出/錯誤流、環境變量、系統屬性、GC 提示、數組複製等。
- 核心字段:
in、out、err(PrintStream)。
- 高頻方法:
currentTimeMillis()、nanoTime()、arraycopy()、getProperty()、getenv()。
- 實戰場景:性能基準測試用
nanoTime();配置外部化讀取 getProperty();高效數組拷貝用 arraycopy()。
3. java.lang.Exception —— 異常體系根基
- 定位:所有異常的父類(除 Error 外),分為 Checked(受檢)與 Unchecked(非受檢)兩大分支。
- 核心結構:
Throwable → Exception → RuntimeException。
- 最佳實踐:業務邏輯拋 Checked 異常強制調用者處理;編程錯誤拋 RuntimeException;自定義異常繼承 Exception 或 RuntimeException 並提供多構造器。
4. java.util.ArrayList —— 動態數組首選
- 定位:基於動態擴容數組實現 List 接口,非線程安全,隨機訪問 O(1),插入刪除 O(n)。
- 擴容機制:默認容量 10,擴容 1.5 倍(
newCapacity = oldCapacity + (oldCapacity >> 1))。
- 對比 Vector:Vector 同步化、擴容 2 倍,性能較差,已被 Collections.synchronizedList 或 CopyOnWriteArrayList 替代。
5. java.util.HashMap —— 鍵值對存儲王者
- 定位:基於數組+鏈表/紅黑樹實現 Map 接口,非線程安全,允許 null key/value。
- 核心參數:默認容量 16、負載因子 0.75、鏈表轉紅黑樹閾值 8、退化閾值 6。
- JDK 8 優化:引入紅黑樹解決哈希衝突最壞 O(n) 問題;
putVal 尾插法避免擴容死循環。
- 線程安全替代:
ConcurrentHashMap(分段鎖/CAS)、Collections.synchronizedMap。
6. java.lang.Object —— 萬物之父
- 定位:所有類的隱式父類,定義通用協議:
equals/hashCode 契約、toString、clone、finalize(已棄用)、wait/notify 協作機制。
- 重寫鐵律:覆寫 equals 必須覆寫 hashCode;toString 建議輸出業務關鍵字段便於調試。
7. java.lang.Thread —— 並發執行單元
- 定位:代表執行緒,可繼承 Thread 或實現 Runnable/Callable 接口。
- 核心狀態:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。
- 現代替代:線程池(ExecutorService)、CompletableFuture、虛擬線程(Java 21+)更推薦,避免手動管理線程生命周期。
8. java.lang.Class —— 反射入口
- 定位:運行時類型信息載體,由類加載器創建,無公共構造器。
- 獲取方式:
Class.forName()、obj.getClass()、Type.class。
- 核心能力:獲取構造器/方法/字段/註解、動態實例化、泛型擦除後類型擷取,是框架開發(Spring、MyBatis、Jackson)基石。
9. java.util.Date —— 歷史包袱與替代
- 定位:JDK 1.0 日期時間類,大多方法已棄用,線程不安全,設計缺陷多(月份 0-based、年份 1900-based)。
- 現代替代:java.time 包(LocalDateTime、ZonedDateTime、Instant、DateTimeFormatter)不可變、線程安全、API 清晰,Java 8+ 必須首選。
- 互轉:
Date.from(instant)、date.toInstant()。
10. java.util.Iterator —— 統一遍歷協議
- 定位:替代 Enumeration 的通用遍歷接口,支援
hasNext()、next()、remove()(可選)、forEachRemaining()(Java 8+)。
- 失效快速機制:集合結構變更時拋出 ConcurrentModificationException,需用 Iterator.remove() 安全刪除。
- 增強 for 底層:編譯器語法糖,本質調用 Iterator。
總結對照表
| 類 | 包 | 核心角色 | 線程安全 | 現代替代/補充 |
| String | java.lang | 不可變字符序列 | ✓ | StringBuilder/StringJoiner |
| System | java.lang | 系統工具 | ✓ | — |
| Exception | java.lang | 異常根類 | — | 自定義異常體系 |
| ArrayList | java.util | 動態數組 | ✗ | CopyOnWriteArrayList |
| HashMap | java.util | 雜湊映射 | ✗ | ConcurrentHashMap |
| Object | java.lang | 根類協議 | — | Objects 工具類 |
| Thread | java.lang | 執行緒 | — | ExecutorService/Virtual Thread |
| Class | java.lang | 反射入口 | ✓ | MethodHandle/VarHandle |
| Date | java.util | 舊日期時間 | ✗ | java.time.* |
| Iterator | java.util | 遍歷協議 | — | Spliterator/Stream |
掌握這 10 大類的設計哲學與實戰細節,是進階 Java 工程師的必修課。建議結合源碼閱讀,深入理解其內部機制。