Java 與 C++ 的比較

參考html

Java 中,一切皆是類

Java 中,全部數據或方法都要放在類中。若是想得到與全局函數等價的功能,可將static方法和static數據放在類裏。而 C++ 中有 struct 結構、enum 枚舉、union 聯合等各類組織形式。java

Java 代碼:ios

public class T {
	public static void main(String[]args) {
		System.out.println("hello world");
	}
}

C++ 代碼:web

#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++ 中,定義前使用會致使編譯錯誤。svg

Java用包代替了C++的命名空間

經過包,Java 能夠針對類名進行相似於命名空間分解的操做。咱們只需「import」導入一個包,剩下的工做會由編譯器自動完成。函數

Java中沒有C++那樣的指針

用 new 建立一個對象的時候,會得到一個引用。指針在帶來靈活性的同時,也帶來了安全隱患和更高的複雜度。spa

Java採用了單根式的分級結構

Java 中,全部對象都是從根類 Object 統一繼承的。而在 C++ 中,能夠在任何地方啓動一個新的繼承樹,因此最後每每看到包含了大量樹的「一片森林」。在Java中,不管如何都只有一個分級結構。儘管這表面上看彷佛形成了限制,但因爲咱們知道每一個對象確定至少有一個Object接口,因此每每能得到更強大的能力。C++目前彷佛是惟一沒有強制單根結構的惟一一種OO語言。

Java中內存實現了自動管理

Java 中內存的分配和回收由Java虛擬機實現。Java 中有垃圾自動回收機制,會自動清理引用數爲0的對象。而在 C++ 編程時,則須要花精力考慮如何避免內存泄漏。

Java內建了對多線程的支持

利用 Thread 類,可經過繼承建立一個新線程(放棄了run()方法)。

若將synchronized(同步)關鍵字做爲方法的一個類型限制符使用,在對象這一級會發生互斥:在任什麼時候間,只有一個線程能使用一個對象的synchronized方法。只有在這個方法退出後,纔會將對象「解鎖」。在線程之間,咱們仍然要負責實現更復雜的同步機制,方法是建立本身的「監視器」類。

Java是單繼承的,但能夠實現多個接口

Java 用 interface 關鍵字建立抽象基礎類的等價物。在其中填充抽象方法,且沒有數據成員。這樣一來,對於僅僅設計成一個接口的東西,以及對於用extends關鍵字在現有功能基礎上的擴展,二者之間便產生了一個明顯的差別。

經過接口實現和類的繼承,Java 中能夠實現相似多繼承的效果。

相關文章
相關標籤/搜索