《Java 編程思想》讀書筆記(一):對象入門與面向對象核心思想
若學 Java 未讀透《Java 編程思想》,不好意思說學過 Java。本系列記錄閱讀心得,助力內化。
1. 抽象的演進
- 匯編 → 機器指令抽象
- FORTRAN/C → 匯編抽象
- LISP/APL → 算法抽象;Prolog → 決策鏈抽象
- OOP:將問題空間元素映射為「對象」,按問題描述問題,而非按方案描述問題
2. Alan Kay 的五大 OOP 特征
- 萬物皆對象:對象 = 數據 + 操作,可從問題提煉概念構建對象
- 程序 = 對象組合 + 消息傳遞:向對象發消息(調用方法)令其工作
- 對象擁有私有存儲:可封裝其他對象構建新對象,複雜度可無限疊加
- 對象有類型(類):類定義接口(能發什麼消息),對象是類的實例
- 同類對象可接收同樣消息:可替換性——子類型可替換父類型(里氏替換原理雛形)
總結:萬物皆對象,程序靠消息驅動對象協作,對象封裝狀態與行為,類型定義接口,多態實現可替換。
3. 接口與訪問控制
- 接口定義「能發什麼消息」,實現細節隱藏(
private)
- 兩大作用:① 防止客戶代碼依賴實現細節;② 允許庫設計者修改內部不影響調用者
- Java 四種訪問級別:
public、protected、default(package)、private
4. 復用:組合優於繼承
- 組合:新類包含現有對象(「有一個」關係),靈活、運行期可動態換裝
- 繼承:子類「是一個」基類,編譯期固定,濫用導致層級膨脹
- 原則:優先組合,確立「是一個」關係且需多態時才繼承
5. 繼承與多態
extends 擴展基類,可覆蓋方法改善行為(改善 = 同接口、不同實現)
- 向上轉型:子類對象賦值給父類引用,調用被覆蓋方法 → 動態綁定 自動調用子類版本
- 抽象類(
abstract)與接口(interface)規範契約,強制子類實現
6. 對象創建與生命周期
- Java 單根繼承(
Object),所有對象最終歸一,便於垃圾回收器統一管理
- 堆上創建,GC 自動回收無引用對象,犧牲確定性換取開發簡易性
- 集合框架(
Collection/Map)+ 迭代器(Iterator)統一訪問不同數據結構
- 參數化類型(泛型)解決「容器元素類型不安全」問題(Java 5 引入)
7. 異常控制
- 異常 = 錯誤處理對象化,從錯誤點拋出,調用鏈向上尋找處理器
- Java 強制檢查異常(Checked Exception),編譯期保證錯誤被處理
8. 多線程
- 語言內建支持,線程即對象(
Thread/Runnable)
- 共享內存模型 → 需同步(
synchronized/Lock)避免競態
9. 永久性與網絡
- 序列化實現有限永久性(對象 → 字節流 → 磁盤/網絡)
- Applet 解決客戶端分發難題(已淘汰),Servlet/JSP 佔領服務端
- 安全模型:沙箱機制限制非受信代碼權限
10. 分析與設計方法論
- 四階段:0-制定計劃 → 1-需求/用例 → 2-設計(UML/文本) → 3-實現 → 4-持續修正(迭代)
- 核心問題:對象是什麼?接口是什麼?
- 迭代開發:先跑通核心框架,再逐漸增量添加特性
- 計劃誠實:感覺時間 ×2 + 10%
11. Java vs C++
- Java 簡單、健壯、跨平台、內建線程/網絡/GC,適合應用層快速開發
- C++ 性能優勢、豐富生態、靈活多樣,適合系統級/高性能場景
- 兩者長期共存,選型看場景而非單純替代