1. 程式人生 > >Java與C++

Java與C++

Java與C++都是面向物件的語言,都使用了面向物件的思想(封裝、繼承、多型),由於面向物件由許多非常好的特性(繼承、組合等),因此二者有很好的可重用性。

主要不同點:

1、Java為解釋性語言,其執行過程為:程式原始碼經過Java編譯器編譯成位元組碼,然後由JVM解釋執行。而C/C++為編譯型語言,原始碼經過編譯和連結後生成可執行的二進位制程式碼,可直接執行。因此Java的執行速度比C/C++慢,但Java能夠跨平臺執行,C/C++不能。

2、Java是純面嚮物件語言,所有程式碼(包括函式、變數)必須在類中實現,除基本資料型別(包括int、float等)外,所有型別都是類。此外,Java語言中不存在全域性變數或者全域性函式,而C++兼具面向過程和麵向物件程式設計的特點,可以定義全域性變數和全域性函式。

3、與C/C++語言相比,Java語言中沒有指標的概念,這有效防止了C/C++語言中操作指標可能引起的系統問題,從而使程式變得更加安全。

4、與C++語言相比,Java語言不支援多重繼承,但是Java語言引入了介面的概念,可以同時實現多個介面。由於介面也有多型特性,因此Java語言中可以通過實現多個介面來實現與C++語言中多重繼承類似的目的。

5、在C++語言中,需要開發人員去管理記憶體的分配(包括申請和釋放),而Java語言提供了垃圾回收器來實現垃圾的自動回收,不需要程式顯示地管理記憶體的分配。在C++語言中,通常會把釋放資源的程式碼放到解構函式中,Java語言中雖然沒有解構函式,但卻引入了一個finalize()方法,當垃圾回收器要釋放無用物件的記憶體時,會首先呼叫該物件的finalize()方法,因此,開發人員不需要關心也不需要知道物件所佔的記憶體空間何時被釋放。

其他不同點:

1>C++語言支援運算子過載;Java不支援運算子過載。

2>C++語言支援預處理;Java沒有前處理器,雖然不支援與處理功能(包括標頭檔案、巨集定義等),但它提供的import機制與C++的前處理器功能類似。

3>C++支援預設函式引數;Java不支援預設函式引數。

4>C/C++支援goto語句;Java不提供goto語句,但Java中的goto是保留關鍵字。

5>C/C++支援自動強制型別轉換,這會導致程式的不安全;Java不支援自動強制型別轉換,必須由開發人員顯式地進行強制型別轉換。

6>C/C++中,結構和聯合的所有成員均為公有,這往往會導致安全性問題的發生;而Java根本就不包含結構和聯合,所有內容都封裝在類裡面。

----------------------------------------------------------------------------------------------------------------------------------------------------------------

1>Java具有平臺無關性,即對每種資料型別都分配固定長度的空間,例如int型總是佔據32位;而C/C++不然,同一個資料型別在不同平臺上會分配不同的位元組數。

2>Java提供對註釋文件的內建支援,所以原始碼檔案也可以包含它們自己的文件。通過一個單獨的程式,這些文件可以提取出來,並重新格式化為HTML。

3>Java包含了一些標準庫,用於完成特定的任務,同時這些庫簡單易用,能夠大大縮短開發週期。例如,Java提供了用於訪問資料庫的JDBC庫,用於實現分散式物件的RMI等標註庫。C++則依靠一些非標準的、由其他廠商提供的庫。