1. 程式人生 > >Java 與 C++ 的比較

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 中可以實現類似多繼承的效果。