參考html
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; }
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; };
C++ 由於語言特色(先定義的方法看不到後定義的),常常須要在類外部定義類的方法,須要做用域範圍限定符「::」。多線程
若想在定義前使用一個類或方法,直接使用便可,編譯器會保證使用恰當的定義。而在 C++ 中,定義前使用會致使編譯錯誤。svg
經過包,Java 能夠針對類名進行相似於命名空間分解的操做。咱們只需「import」導入一個包,剩下的工做會由編譯器自動完成。函數
用 new 建立一個對象的時候,會得到一個引用。指針在帶來靈活性的同時,也帶來了安全隱患和更高的複雜度。spa
Java 中,全部對象都是從根類 Object 統一繼承的。而在 C++ 中,能夠在任何地方啓動一個新的繼承樹,因此最後每每看到包含了大量樹的「一片森林」。在Java中,不管如何都只有一個分級結構。儘管這表面上看彷佛形成了限制,但因爲咱們知道每一個對象確定至少有一個Object接口,因此每每能得到更強大的能力。C++目前彷佛是惟一沒有強制單根結構的惟一一種OO語言。
Java 中內存的分配和回收由Java虛擬機實現。Java 中有垃圾自動回收機制,會自動清理引用數爲0的對象。而在 C++ 編程時,則須要花精力考慮如何避免內存泄漏。
利用 Thread 類,可經過繼承建立一個新線程(放棄了run()方法)。
若將synchronized(同步)關鍵字做爲方法的一個類型限制符使用,在對象這一級會發生互斥:在任什麼時候間,只有一個線程能使用一個對象的synchronized方法。只有在這個方法退出後,纔會將對象「解鎖」。在線程之間,咱們仍然要負責實現更復雜的同步機制,方法是建立本身的「監視器」類。
Java 用 interface 關鍵字建立抽象基礎類的等價物。在其中填充抽象方法,且沒有數據成員。這樣一來,對於僅僅設計成一個接口的東西,以及對於用extends關鍵字在現有功能基礎上的擴展,二者之間便產生了一個明顯的差別。
經過接口實現和類的繼承,Java 中能夠實現相似多繼承的效果。