首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Java 與 C++ 深度對比(二):線程、訪問控制、內部類、繼承、接口、異常、標準庫

     編輯:關於C++

26. 多線程內建支持

Java:`extends Thread` / `implements Runnable`,`synchronized` 方法/塊實現對象鎖(可重入)。無顯式鎖對象(Java 5+ `java.util.concurrent.locks` 补充)。C++:C++11 前無標準線程庫,依賴 pthread/Win32 API。

27. 訪問修飾符差異

  • C++:類級區塊 `public:` `private:` `protected:`。
  • Java:成員級修飾符。默認 `package-private`(同包可見,類比 C++ `friend`)。`protected` = 子類 + 同包(C++ 僅子類)。`private protected` 已廢棄。

28. 內部類機制

Java 內部類實例隱式持有外部類實例引用(`OuterClass.this`),可無限制訪問外部成員(含 `private`)。解決回調問題無需指針。C++ 嵌套類無隱式引用,需顯式傳遞 `this` 指針。

29. 無成員指針

因內部類機制,Java 不需要「指向成員的指針」(C++ `&Class::member`)。

30. 內聯方法

Java 編譯器自動決定內聯(JIT 編譯階段)。`final` 方法建議內聯(禁止重寫利於靜態綁定)。C++ `inline` 僅建議編譯器。

31. 繼承語法與超類調用


public class Foo extends Bar {
    public Foo(String msg) { super(msg); }
    public void baz(int i) { super.baz(i); }
}

`super` 僅調用直接父類(C++ 可 `Base::method()` 調用任意祖先)。構造器鏈強制 `super()` 首行。

32. 繼承不改變保護級別

Java 無 `public/private/protected` 繼承區分。重寫方法訪問權限不得縮小(編譯器強制)。C++ 可通過繼承方式改變基類成員可見性。

33. 接口機制

`interface` 純抽象契約(Java 8+ 允許 `default`/`static` 方法)。`implements` 多實現替代多繼承。`abstract` 類可含實現但單繼承。接口分離「契約」與「實現繼承」。

34. 動態綁定與 final

Java 非靜態方法默認動態綁定(無 `virtual`)。`final` 方法禁用重寫 → 靜態綁定 → 內聯優化。C++ 需顯式 `virtual` 開啟動態綁定,性能敏感處可不加。

35. 單根繼承與多接口

Java 單繼承(`extends` 一個類)+ 多實現(`implements` 多接口)。`Object` 為根。C++ 多繼承靈活但複雜(菱形繼承需虛繼承)。

36. 運行時類型檢查 (RTTI)

Java:`obj.getClass().getName()`,向下轉型 `(Derived) base` 自動檢查拋 `ClassCastException`。C++:`typeid`,`dynamic_cast`(需 RTTI 支持,虛函數表)。

37. 異常處理:finally 與 Throwable 體系

Java 無析構函數 → `finally` 塊保證清理執行。所有異常繼承 `Throwable`(`Error` + `Exception`)。`try-catch-finally` 結構清晰。

38. 異常規範:編譯期檢查

Java `throws` 聲明檢查異常(Checked Exception)編譯期強制處理/傳播。重寫方法異常類型必須兼容(同類或子類)。C++ 異常規範運行期檢查(C++11 棄用 `throw()` 改 `noexcept`)。

39. 運算符重載

Java 無運算符重載。`String` 特殊支持 `+`/`+=` 拼接。C++ 完全支持運算符重載(含 `new`/`delete`/`()`/`[]`/`->` 等)。

40. const 與傳值語義

Java 參數傳引用(對象引用按值傳遞),無 `const`。需傳值用 `clone()`(淺拷貝問題)。C++ `const` 引用/指針提供只讀保證,支持傳值/傳引用/傳指針多種語義。

41-46. 其他:Applet 安全、JNI 本地方法、文檔註釋、標準庫、JavaBeans、空指針異常、健壯性特性

  • Applet 沙箱限制磁盤/網絡訪問,簽名授權放寬。
  • JNI 調用 C/C++ 代碼(僅應用程序,Applet 禁止)。
  • `javadoc` 標準化 HTML 文檔生成。
  • Java 內建網絡、JDBC、RMI/CORBA、Commerce 標準庫。
  • JavaBeans 組件模型推動可視化開發。
  • 空引用訪問拋 `NullPointerException`(C++ 未定義行為)。
  • 健壯性:引用自動 `null` 初始化、數組越界檢查、GC 防洩漏、異常處理、線程支持、字節碼驗證。

總結

本文系統梳理了 Java 與 C++ 在核心語言特性上的根本差異,反映了兩種設計哲學:Java 追求安全、簡單、標準化運行時;C++ 追求零開銷抽象、硬件級控制、泛型編程。理解差異有助於跨語言遷移、技術選型、面試應對。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved