Java與C/C++有什麼區別

來源:酷知科普網 5.29K

Java與C/C++作為程式設計語言的兩大巨頭,他們有什麼區別呢?在概念上在實際的學習和應用中java和C/C++又有什麼不同呢?這是所有熟悉C語言和C++語言的讀者都想搞清楚的問題,筆者做一下總結:

Java與C/C++有什麼區別

Java與C/C++有什麼區別

(01)Java中對記憶體的分配是動態的,它採用物件導向的機制,採用運算子new為每個物件分配記憶體空間,而且,實際記憶體還會隨程式執行情況而改變.程式執行中,每個, Java系統自動對記憶體進行掃描,對長期不用的空間作為”垃圾”進行收集,使得系統資源得到更充分地利用.按照這種機制,程式設計師不必關注記憶體管理問題,這使Java程式的編寫變得簡單明瞭,並且避免了了由於記憶體管理方面的差錯而導致系統出問題.而C語言通過malloc()和free()這兩個庫函式來分別實現分配內在和釋放記憶體空間的,C++語言中則通過運算子new和delete來分配和釋放記憶體.在C和C++這仲機制中,程式設計師必須非常仔細地處理記憶體的使用問題.一方面,如果對己釋放的記憶體再作釋放或者對未曾分配的記憶體作釋放,都會造成宕機;而另一方面,如果對長期不用的或不再使用的記憶體不釋放,則會浪費系統資源,甚至因此造成資源枯竭.

(02)Java不在所有類之外定義全域性變數,而是在某個類中定義一種公用靜態的變數來完成全域性變數的功能.

(03)Java不用goto語句,而是用try-catch-finally異常處理語句來代替goto語句處理出錯的功能.

(04)Java不支援標頭檔案,面C和C++語言中都用標頭檔案來定義類的原型,全域性變數,庫函式等,這種採用標頭檔案的結構使得系統的執行維護相當繁雜.

(05)Java不支援巨集定義,而是使用關鍵字final來定義常量,在C++中則採用巨集定義來實現常量定義,這不得於程式的可讀性.

(06)Java對每種資料型別都分配固定長度.比如,在Java中,int型別總是32位的,而在C和C++中,對於不同的平臺,同一個資料型別分配不同的位元組數,同樣是int型別,在PC機中為二位元組即16位,而在VAX-11中,則為32位.這使得C語言造成不可移植性,而Java則具有跨平臺性(平臺無關性).

(07)型別轉換不同.在C和C++中,可通過指標進行任意的型別轉換,常常帶來不安全性,而在Java中,執行時系統對物件的處理要進行型別相容性檢查,以防止不安全的轉換.

(08)結構和聯合的處理.在C和C++中,結構和聯合的所有成員均為公有,這就帶來了安全性問題,而在Java中根本就不包含結構和聯合,所有的內容都封裝在類裡面

(09)Java不再使用指標.指標是C和C++中最靈活,也最容易產生錯誤的資料型別.由指標所進行的記憶體地址操作常會造成不可預知的錯誤,同時通過指標對某個記憶體地址進行顯式型別轉換後,可以訪問一個C++中的私有成員,從而破壞安全性.而Java對指標進行完全地控制,程式設計師不能直接進行任何指標操作.

熱門標籤