Java 與 C++ 的比較
Java 中,一切皆是類
Java 中,所有資料或方法都要放在類中。如果想獲得與全域性函式等價的功能,可將static方法和static資料放在類裡。而 C++ 中有 struct 結構、enum 列舉、union 聯合等各種組織形式。
Java 程式碼:
public class T {
public static void main(String[]args) {
System.out.println("hello world");
}
}
C++ 程式碼:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello,C++ world of AnycodeX!" << endl;
return 0;
}
Java 中,只有類定義,沒有類宣告,且結尾不需要分號
C++ 則需要結尾的分號,否則編譯報錯 error: expected ';' after class definition
。
C++ 程式碼:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello,C++ world of AnycodeX!" << endl;
return 0;
}
class T {
private:
int a;
};
Java中沒有作用域範圍運算子“::”
C++ 因為語言特點(先定義的方法看不到後定義的),經常需要在類外部定義類的方法,需要作用域範圍限定符“::”。
Java中 char 型別使用16位Unicode字符集
Java中不必進行提前宣告
若想在定義前使用一個類或方法,直接使用即可,編譯器會保證使用恰當的定義。而在 C++ 中,定義前使用會導致編譯錯誤。
Java用包代替了C++的名稱空間
通過包,Java 可以針對類名進行類似於名稱空間分解的操作。我們只需“import”匯入一個包,剩下的工作會由編譯器自動完成。
Java中沒有C++那樣的指標
用 new 建立一個物件的時候,會獲得一個引用。指標在帶來靈活性的同時,也帶來了安全隱患和更高的複雜度。
Java採用了單根式的分級結構
Java 中,所有物件都是從根類 Object 統一繼承的。而在 C++ 中,可以在任何地方啟動一個新的繼承樹,所以最後往往看到包含了大量樹的“一片森林”。在Java中,無論如何都只有一個分級結構。儘管這表面上看似乎造成了限制,但由於我們知道每個物件肯定至少有一個Object介面,所以往往能獲得更強大的能力。C++目前似乎是唯一沒有強制單根結構的唯一一種OO語言。
Java中記憶體實現了自動管理
Java 中記憶體的分配和回收由Java虛擬機器實現。Java 中有垃圾自動回收機制,會自動清理引用數為0的物件。而在 C++ 程式設計時,則需要花精力考慮如何避免記憶體洩漏。
Java內建了對多執行緒的支援
利用 Thread 類,可通過繼承建立一個新執行緒(放棄了run()方法)。
若將synchronized(同步)關鍵字作為方法的一個型別限制符使用,在物件這一級會發生互斥:在任何時間,只有一個執行緒能使用一個物件的synchronized方法。只有在這個方法退出後,才會將物件“解鎖”。線上程之間,我們仍然要負責實現更復雜的同步機制,方法是建立自己的“監視器”類。
Java是單繼承的,但可以實現多個介面
Java 用 interface 關鍵字建立抽象基礎類的等價物。在其中填充抽象方法,且沒有資料成員。這樣一來,對於僅僅設計成一個介面的東西,以及對於用extends關鍵字在現有功能基礎上的擴充套件,兩者之間便產生了一個明顯的差異。
通過介面實現和類的繼承,Java 中可以實現類似多繼承的效果。