Java 內部類實戰:控制框架與溫室自動化系統
為什麼需要內部類? 應用框架要求「將變化的東西與不變的東西分離」。控制框架是事件驅動系統的核心: 不變:事件調度、時間檢查、列表管理(Controller
Java 構造器調用順序全解析:繼承鏈、成員初始化與多態陷阱
標準調用順序 基類構造器:遞歸向上,從根基類(Object)向下到最深衍生類。 成員初始化:按聲明順序初始化實例字段(含隱式/顯式初始化)。 衍生
Java 繼承與 finalize():正確的清理鏈調用順序
組合 vs 繼承的清理差異 組合:成員對象獨立,GC 自動調用各自 finalize(),無需手動干預。 繼承:衍生類 finalize() 必須顯式
構造器中調用多態方法的陷阱:初始化順序導致的隱性 Bug
現象:構造器內動態綁定調用「跑偏」 在構造器中調用被覆寫的方法,會調用衍生類版本。但此時衍生類成員尚未初始化,導致訪問到默認值(0/null),而非預期值。
組合優於繼承:運行時行為動態切換的 Transmogrify 模式
繼承的侷限性 繼承在編譯期確定類型與行為,運行期無法改變。濫用繼承會導致類層次膨脹、耦合加深。 組合的靈活性:State 模式雛形 通過持有介面引用,運行期動
Java 繼承設計:純粹「是一個」關係 vs 「類似於」擴展接口
純粹繼承:「是一個」關係 衍生類只覆寫基類方法,不添加新方法。接口完全一致,衍生類對象可完美替換基類對象,無需知道子類細節。這是「純替換」模型,多態控制一切細節
Java 向下轉型與 RTTI:運行時類型識別的安全網
為何需要向下轉型? 向上轉型(衍生類→基類)安全無虞,但導致具體類型信息丟失。當需要調用衍生類特有方法時,必須向下轉型(基類→衍生類)。風險在於:引用指向的對象
Java 多態總結:動態綁定、接口分離與設計視野的昇華
多態的核心含義 「多態」意為「多種形式」。在 OOP 中表現為:統一的外觀(基類接口)+ 不同的具體實現(衍生類覆寫方法)。關鍵在於動態綁定——運行時根據對象實
Java 對象持有策略:從固定句柄到動態集合的演進
問題的本質 若程序對象數量固定、生命週期已知,直接用命名引用(MyObject handle;)足矣。但現實中: 對象數量在運行時才確定 對象類型可能
Java 經典參考書推薦:從入門到精通的必讀清單
核心參考類 《Java in a Nutshell: A Desktop Quick Reference》(第 2 版)David Flanagan 著,
Java 數組 vs 集合:效率、類型安全與邊界檢查的權衡
數組的兩大核心優勢 極致訪問效率:數組是簡單線性序列,元素訪問無額外開銷,是 Java 中存取對象序列最快的方式。 編譯期類型安全:創建數組時指定具體
Java 數組深度解析:引用語義、初始化語法與基本類型效率
數組本質:指向堆對象的引用 Java 中數組標識符實際是指向堆內存中真實數組對象的引用(句柄)。數組對象創建方式有二: 隱式創建:如 int[] a =
Java 方法返回數組:垃圾回收讓內存管理無憂
C/C++ 的痛點:指針與內存洩漏 在 C/C++ 中,函數無法直接返回數組,只能返回指針。這導致「數組的生命週期」難以控制:若在棧上分配,函數返回後內存失效;
Java 集合框架概覽:Vector、Stack、Hashtable 與 BitSet
為什麼需要集合類? 數組雖然高效,但大小固定且無法動態擴展。現實開發中,我們往往在編寫代碼時無法確定需要多少對象,或者需要更靈活的存儲方式(如鍵值對應、先進後出
Java 集合的缺點:類型擦除與運行時風險
Java 集合的核心缺陷:類型信息的丟失 Java 集合框架(如 Vector、ArrayList 等)在設計上為了實現「通用性」,犧牲了編譯期的類型安全。當你
Enumeration (迭代器) 基礎:統一遍歷介面與型別擦除挑戰
為何需要迭代器? 直接使用集合具體類別 (如 Vector 的 elementAt()) 導致客戶代碼綁定具體實作。若後續換用 List (Java 1.2),
Vector 進階用法與 toString() 遞迴陷阱
Vector 核心方法速查 常用:addElement()、elementAt()、elements() 獲取 Enumeration。其他實用方法請查閱電子文
BitSet 深度解析:位向量操作與版本陷阱
BitSet 定位與特性 本質:位元組成的 Vector,高效儲存大量開關狀態 (位標誌)。 最小長度 64 位 (Long),儲存極小數據 (如 8 位)