多線程模型
Java 內建多線程:繼承 `Thread` 重寫 `run()`,`synchronized` 關鍵字實現對象級互斥鎖(自動加鎖/解鎖),支持遞歸同步。C++ 無內建線程(C++11 前),依賴平台 API(pthread, Windows API)或第三方庫。
訪問控制差異
- C++:類級別 `public/private/protected` 區塊聲明。
- Java:成員級別修飾符。默認 `package-private`(同包可見,類似 C++ `friend`)。`protected` 含義不同:Java = 子類 + 同包;C++ = 僅子類。
內部類與指針
Java 內部類隱式持有外部類引用,可直接訪問外部成員(解決回調問題)。因此 Java 無成員指針、無 `this` 指針操作。C++ 嵌套類僅作名稱空間管理,需顯式傳遞外部對象指針。
內聯與 final
C++ `inline` 建議編譯器內聯。Java 無 `inline`,編譯器自動決定;`final` 方法暗示可內聯(禁止重寫,利於靜態綁定)。
繼承機制
- Java:`extends` 單繼承,`super` 僅調用直接父類。構造器鏈強制 `super()` 在首行。所有類隱式繼承 `Object`。
- C++:支持多繼承、虛繼承,構造器初始化列表靈活控制基類構造順序。
接口與多態
Java `interface` 純抽象契約,`implements` 實現,支持多實現(替代多繼承)。無 `virtual` 關鍵字,非靜態方法默認動態綁定。`final` 禁止重寫(靜態綁定優化)。C++ `virtual` 顯式聲明動態綁定,性能調優手段。
異常處理
- Java:`try-catch-finally`,`throws` 聲明檢查異常(編譯期強制)。重寫方法異常規範不得擴大。所有異常繼承 `Throwable`。無析構函數,資源釋放靠 `finally` 或 try-with-resources (Java 7+)。
- C++:無 `finally`,依賴 RAII(析構函數)釋放資源。異常規範運行期檢查(C++11 棄用)。
其他關鍵差異
- 運算符重載:C++ 支持,Java 僅 `String` 特殊支持 `+`/`+=`。
- 泛型:Java 類型擦除,C++ 模板實例化(代碼膨脹但零開銷)。
- 內存管理:Java GC 自動回收;C++ 手動 `new/delete` 或智能指針(RAII)。
- 標準庫:Java 內建網絡、數據庫、多線程、分佈式(JDBC, RMI, CORBA);C++ 依賴第三方庫(Boost, POCO 等)。
- 文檔:Java `javadoc` 標準化 HTML 輸出;C++ 依賴 Doxygen 等工具。
總結
Java 設計哲學:安全、簡單、標準化、運行時豐富(GC, 反射, 動態加載)。C++ 哲學:零開銷抽象、極致性能、硬件訪問、泛型編程。選型取決於應用場景:企業級應用、Android 首選 Java/Kotlin;系統編程、遊戲引擎、高頻交易首選 C++。