1. 程式人生 > >C++ 與 Java 語言對比

C++ 與 Java 語言對比

1 . Java 是完全封裝的,而 C++ 的函式是可以定義在 Class 的外部的。從這裡就可以看出 C++ 的 OO 思想不夠徹底,至少在封裝這一點上。

2. C++ 中有拷貝建構函式,可以把一個物件的屬性 copy 到另一個物件裡 , 也叫物件賦值,而 Java 是用 Clone 實現的。

3. Java 的世界是 Object 世界(當然除了基本型別,這是 Java 美中不組的一點),物件之間的關係是 Reference 的,象 C++ 中的指標,我們叫他控制代碼。但在 C++ 中物件之間是可以直接賦值的!在Java 中只是控制代碼和控制代碼之間的轉換! Java 和 C++ 都有 this, 在 C++ 中 this 表示指標,而在 Java 我們叫他引用。但在用法上大同小異。

4. C++ 中有所謂的析夠函式,而 Java 中也有一個類似的東西叫做 finalize, 是 Object 類的一個方法, 但 Java 中有個很好的東東就是自動回收機制。而 C++ 中你 new 的東西不 delete 的話是不會自動清理記憶體的,所以 Java 要省事些啊 !

5 . C++ 的函式有個預設的概念,在 Java 中是沒有的。但 JDK1.5 的範型的 String… 引數似乎有點象 , Java 在最初拋棄 C++ 一些思想之後,現在似乎也慢慢也入了一些東西!

6. static 關鍵字 , C++ 和 Java 中意思基本相同, C++ 中 static 變數必須在類外初始化。

7. C++ 中的物件成員要在本類的建構函式之前構建,而 Java 沒有這個規則, Java 的物件和普通變數一樣簡單。

8. C++ 有個常量修飾符 const, 而 Java 中一個常量一般是用 static + final 等價實現。

9 .可能寫 Java 的朋友很不習慣的就是 C++ 的每個類都有個分號結尾。

10 . Java 有個很好的東西叫包,使得全世界的類不會發生衝突。在 C++ 也有一個類似的東西叫做作用域運算子 “ :: ” 表示。

11 . Java 在子類的方法過載中要想呼叫父類的同名方法只要用 Super 關鍵字,而在 C++ 中要用基類名 + 域運算子( :: )以達到同樣的效果。

12. C++ 有多重繼承,而在 Java 中只是單根繼承,但是用 Java 的介面可以達到類似的效果。多重繼承有二義性,但可用虛基類( virtual )解決該問題。

13. Java 中的多型完全是繼承的原因,而 C++ 除了繼承又引入了虛基類和虛擬函式(實現了執行時多型性)的概念。

14. C++ 中聲明瞭純虛擬函式的類為抽象類,而在 Java 中有 abstract 宣告的 Method (當然類也要用 abstract 修飾) 就是抽象類 , 在抽象類方面 Java 原自 C++, 即兩者觀念上是一致的。

15 . Java 中的物件全都是 new 出來的,而 C++ 不同,當然他也有 new 功能, Java 中理論上你可以隨意 new Object, 他有 gc 這個物件管家,而 C++ new 的 Object 你一定要手動 delete 他。

16 . C++ 中有運算子過載 , Java 裡只有 + 號有過載的意思,不過在 JDK5 中也有其他的運算子過載,比如兩個類物件可以直接相加。 C++ 可以將自定義型別強制轉換為基本型別,如將一 Test 類的物件,強制轉換為 int 類的物件,要達到這個效果就要用到 operator 關鍵字, Java 除了 8 大基本型別以外都是 OO 的,但 Java 也提供了基本型別的對應 Class 型別。

17 . C++ 中有模板的概念 ( 類模板,函式模板 ) ,在早期的 Java 版本 (1.4 之前 ) ,沒有模板的概念,但 1.5 引入了範型,與模板的思想類似,這可是好東西。如果你看 Java 原碼庫,你會發現他變化的好大。

 

 

 

小結 :

  1. 學習任何東西,往往在對比中會有更好的收穫。

  2. 當然 C++ 和 Java 還有很多不同,這裡就不一一列舉,感性趣的朋友可以繼續總結。

  3. 相比之下你會覺得 Java 的世界更美好。但要學好 Java 你沒有理由不去學 C++ 。


 文章出處:http://www.blogjava.net/Jack2007/archive/2007/11/11/159665.html