封裝:隱藏內部狀態,提供公共方法訪問(private + getter/setter)。
繼承:子類復用父類屬性方法,extends 單繼承。
多態:同一接口不同實現,編譯時多態(重載)、運行時多態(重寫)。
抽象:提取共性行為定義接口/抽象類,屏蔽實現細節。
| 維度 | 抽象類 | 接口 |
|---|---|---|
| 方法實現 | 可有抽象/具體方法 | 默認所有方法抽象;JDK8+ 可有 default/static 方法 |
| 繼承關係 | 單繼承 | 多實現 |
| 構造器 | 有(子類調用) | 無 |
| 字段 | 任意修飾符 | 默認 public static final |
| 設計意圖 | "is-a" 強關係,共享代碼 | "has-a" 能力擴展,契約規範 |
避免「菱形繼承」二義性問題(兩個父類有同名方法,子類調用歧義)。通過接口多實現替代,JDK8 default 方法衝突需顯式重寫解決。
不能。static 階段非 static 變量尚未創建(需實例化後才存在)。
| 基本類型 | 包裝類 | 大小 |
|---|---|---|
| byte | Byte | 1 字節 |
| short | Short | 2 字節 |
| int | Integer | 4 字節 |
| long | Long | 8 字節 |
| float | Float | 4 字節 |
| double | Double | 8 字節 |
| boolean | Boolean | 1 位(實際 1 字節) |
| char | Character | 2 字節 |
Integer i = 10 實為 Integer.valueOf(10))。int n = i 實為 i.intValue())。Integer 緩存 -128~127,Long 同理,超出範圍新建對象。| 特性 | 重載 | 重寫 |
|---|---|---|
| 位置 | 同一類 | 父子類 |
| 方法名 | 相同 | 相同 |
| 參數列表 | 必須不同 | 必須相同 |
| 返回類型 | 可不同 | 兼容(协變) |
| 權限修飾符 | 無限制 | 不能更嚴格 |
| 綁定時機 | 編譯期 | 運行期 |
new Obj(obj) 或實現 Cloneable。Java 只有值傳遞。
基本類型:傳值副本。
引用類型:傳引用的副本(指向同一對象),方法內修改對象內容可見,但無法改變實參引用指向。
extends Threadimplements Runnable ✅ 推薦:避免單繼承限制,邏輯與線程控制分離。ExecutorService 線程池 ✅ 生產首選:復用線程、控制併發、管理生命周期。NEW → RUNNABLE → (RUNNING) → BLOCKED/WAITING/TIMED_WAITING → TERMINATED
就緒 運行中 阻塞/等待/超時等待 死亡
this(實例方法)或 Class 對象(靜態方法),粒度粗。synchronized(obj) { } 可指定任意對象為鎖,粒度細,性能優。四條件:互斥、請求保持、不可剝奪、循環等待。
預防:統一加鎖順序(如按對象 hashCode 排序),打破循環等待。
強制所有線程按固定順序獲取鎖(如資源 ID 升序)。
Collection → List(有序、可重復)、Set(無序、唯一)。Map:鍵值對,Key 唯一。具體實現決定存儲方式(數組/鏈表/紅黑樹/哈希表)、是否允許重複、是否有序。接口不強制實現細節,由子類決定。
Iterator 統一遍歷接口,支持 remove()。java.util 集合,遍歷中結構修改拋 ConcurrentModificationException。java.util.concurrent 集合,遍歷副本,不拋異常。| 特性 | Iterator | ListIterator |
|---|---|---|
| 適用 | Collection | List |
| 方向 | 單向 | 雙向 |
| 功能 | 遍歷、刪除 | +增、改、索引查詢 |
put():hash(key) → 索引 → 遍歷鏈表/樹比較 equals() → 覆蓋或插入。(n-1) & hash)。| 點 | HashMap | Hashtable |
|---|---|---|
| Null Key/Value | 允許 | 不允許 |
| 線程安全 | 非安全 | 同步方法(性能差) |
| 迭代器 | fail-fast | Enumerator(非 fail-fast) |
| 推薦 | 單線程/手動同步 | 遺留類,建議用 ConcurrentHashMap |
| 操作 | ArrayList | LinkedList |
|---|---|---|
| 隨機訪問 | O(1) ✅ | O(n) |
| 頭尾增刪 | O(n) 擴容/移位 | O(1) ✅ |
| 中間增刪 | O(n) 移位 | O(n) 查找 + O(1) 插入 |
| 內存 | 緊湊 | 額外 prev/next 指針 |
Comparable:內部比較,compareTo(this, other),自然順序。Comparator:外部比較,compare(o1, o2),策略模式,可多種排序。基於最小堆(默認自然順序或 Comparator),無界、非線程安全、offer/poll 為 O(log n)。
描述最壞情況時間/空間複雜度。選集合時:查找多用 HashMap/HashSet O(1);頻繁頭尾增刪用 LinkedList;隨機訪問用 ArrayList;有序需求用 TreeMap/TreeSet O(log n)。
new ArrayList(100))。List<String> list = new ArrayList<>()。Collections.emptyList(),勿返回 null。| 實現 | HashSet | TreeSet |
|---|---|---|
| 底層 | HashMap | TreeMap (紅黑樹) |
| 順序 | 無序 | 有序 (自然/Comparator) |
| 增刪查 | O(1) | O(log n) |
System.gc() 提示、JVM 判斷必要時。只是建議 JVM 執行 GC,不保證立即執行,由 JVM 決策。
try-with-resources / Cleaner (JDK9+) 替代。不會。下一次 GC 週期中該對象成為可回收候選者。
不可達性分析:從 GC Roots 搜索無引用鏈可達 → 可回收。
會。類卸載、常量清理發生在 Full GC 中。元空間滿觸發 Full GC,故需合理配置 -XX:MaxMetaspaceSize。
(下篇預告:異常處理、I/O、JDBC、反射、JVM 調優、Spring、MyBatis、分布式、微服務、設計模式、演算法)