Sun 官方白皮書定義了 Java 的 11 大關鍵特性,配合 OOP 核心概念,構成 Java 程式設計的**認知骨架**。本文提煉 30 個必懂概念,每個概念附帶「核心定義 + 關鍵點 + 面試/實戰陷阱」,助你快速建立完整知識地圖。
| # | 特性 | 核心內涵 | 實戰意義 |
|---|---|---|---|
| 1 | Simple (簡單) | 移除 C++ 複雜特性 (指標、多重繼承、操作符重載、預處理器),語法接近 C/C++ 易上手 | 降低認知負載,但簡單不代表簡陋 (泛型擦除、類型擦除、記憶體模型極深) |
| 2 | Object-Oriented (物件導向) | 封裝、繼承、多態、抽單介面導向設計、單繼承+多實作 | 核心建模工具,設計模式落地基礎 |
| 3 | Distributed (分散式) | 內建 TCP/IP 支援 (java.net)、RMI、JNDI、JMS、Web Services、gRPC | 天生適合微服務、雲原生架構 |
| 4 | Robust (健壯) | 強類型、自動記憶體管理 (GC)、異常處理、編譯期/運行期雙重檢查、無指標運算 | 消除記憶體洩漏 (手動管理)、空指標崩潰 (NPE 仍需防禦)、緩衝區溢位 |
| 5 | Secure (安全) | 沙箱 (SecurityManager)、位元組碼驗證器、類載入器隔離、加密 API (JCA/JCE)、認證授權 (JAAS) | Applet 時代遺產,現代應用於插件系統、非信任代碼隔離 |
| 6 | Architecture Neutral (架構中立) | 編譯為平台無關位元組碼 (Class 檔案格式),JVM 屏蔽硬體差異 | 「一次編寫,到處運行」基石 |
| 7 | Portable (可移植) | 基本型位寬固定 (int 32bit, long 64bit 等)、字元編碼 Unicode、浮點運算 IEEE 754 | 跨平台數值一致性保證 |
| 8 | Interpreted (解釋執行) | 位元組碼由 JVM 解釋器執行,支援動態載入、熱部署、JIT 編譯優化 | 啟動快、動態性強、JIT 達到接近原生效能 |
| 9 | High Performance (高效能) | JIT 編譯器 (C1/C2/Graal)、逃逸分析、內聯、向量化、壓縮指標、ZGC/Shenandoah 低延遲 GC | 長時間運行效能超越 C++ (JIT 溫識別熱點優化) |
| 10 | Multithreaded (多執行緒) | 語言級支援 (synchronized/volatile/Thread)、JUC 高階併發、虛擬執行緒 (Project Loom/JDK 21) | 高併發伺服器開發標配,結構化併發簡化邏輯 |
| 11 | Dynamic (動態) | 運行期類載入、反射、動態代理、註解處理、Agent 儀器化、模組系統 (JPMS) | 框架 (Spring/Hibernate) 魔法來源、熱更新、AOP、領域特定語言 |
| # | 概念 | 核心定義 | 關鍵點/陷阱 |
|---|---|---|---|
| 1 | 物件 | 狀態 (屬性) + 行為 (方法) 的封裝實體,擁有唯一身分 | 狀態封裝 (private)、行為暴露 (public)、身分 != 狀態 |
| 2 | 類別 | 物件的藍圖/模板,定義結構與行為 | 類別也是物件 (Class 實例)、靜態成員屬於類別 |
| 3 | 封裝 | 隱藏內部實現細節,暴露受控介面 | 存取修飾字、資訊隱藏、不變約束維護、防禦性複製 |
| 4 | 繼承 | 子類別復用父類別結構行為,建立 is-a 關係 | 單繼承、LSP 里氏替換原則、優先組合、final 禁止繼承 |
| 5 | 多態 | 同一介面調用不同實作 (編譯期多載/運行期覆寫) | 動態綁定、虛方法表、覆寫規則 (协变返回類型、例外縮小) |
| 6 | 抽象 | 提取本質特徵,忽略非本質細節 (抽象類/介面) | 介面可含 default/static/private 方法 (JDK 8+)、標記介面 |
| 7 | 介面 | 契約規範,定義「能做什麼」不定義「怎麼做」 | 多實作、介面隔離原則 (ISP)、函數式介面 (單一抽象方法) |
| 8 | 建構子 | 物件初始化特殊方法,無返回類型、名稱同類別 | 預設建構子、重載、鏈式調用 (this()/super())、不可繼承 |
| 9 | 實例化 | new 關鍵字分配堆記憶體、呼叫建構子、返回引用 | 引用 vs 物件、匿名物件、物件生命週期 |
| 10 | 引用變數 | 指向堆上物件的句柄 (非指標,不可算術運算) | null 引用、引用傳值 (呼叫端引用不可變、物件內容可變) |
| 11 | 靜態成員 | 屬於類別而非實例,類載入時初始化 (static block/field) | 靜態導入、單例模式、常量池、執行緒安全初始化 |
| 12 | final 關鍵字 | 不可變引用/不可覆寫方法/不可繼承類別/編譯期常量 | effectively final (Lambda 捕獲)、final 域語義 (JMM 保證可見性) |
| 13 | 抽象類 vs 介面 | 抽象類可有狀態/建構子/非公開方法;介面純契約 (JDK 8 前) | 選型原則:is-a 強關係用抽象類、能力描述用介面、預設方法演進 |
| 14 | 物件三大特徵 | 行為、狀態、身分 — 相互影響、唯一身分 | == 比較身分、equals 比較邏輯相等、hashCode 配合 equals |
| 15 | 類別關係 | 依賴 (use-a)、關聯/聚合/組合 (has-a)、繼承 (is-a)、實作 | UML 箭頭表示、耦合度由弱到強:依賴 < 關聯 < 聚合 < 組合 < 繼承 |
| 16 | 物件轉型 | 向上轉型 (隱式安全)、向下轉型 (需 instanceof/模式匹配) | JDK 16+ if (obj instanceof String s) 模式匹配簡化 |
| 17 | equals/hashCode 契約 | 相等物件必有相等雜湊碼、相等關係具備自反/對稱/傳遞/一致性 | 覆寫 equals 必覆寫 hashCode、業務主鍵 vs 邏輯相等 |
| 18 | 不可變物件 | 構造後狀態不可變 (String、Record、值物件) | 執行緒安全、防禦性複製、領域驅動設計值物件基石 |
| 19 | 記憶體模型 (JMM) | 主記憶體/工作記憶體、happens-before 規則、volatile/同步語義 | 指令重排、可見性、原子性、有序性、DCL 雙重檢查鎖失效原因 |
Class<T> Token 傳遞實際類型。Class、Method/Field/Constructor、setAccessible(true) 破壞封裝、效能開銷、框架核心機制。InvocationHandler、AOP 基石。Serializable/Externalizable、serialVersionUID、transient、readObject/writeObject、安全風險 (反序列化漏洞)、替代方案 (JSON/Protobuf/Avro)。module-info.java、強封裝、可讀性/可及性、服務發現 (uses/provides)、遷移挑戰 (內部 API 封裝、分封裝)。這 30 個概念不是死記硬背的知識點,而是**解決具體工程問題的思維工具**。建議:每遇到一個概念,寫一段代碼驗證其行為、畫一張圖解釋其機制、找一個實際 Bug 案例分析其成因。將概念內化為直覺,才是真正的「掌握」。