Java語言和C++語言的差異—老生常談

Java語言和C++語言的差異—老生常談

 [引子]這個話題並不新鮮,但是作爲語言比較類的文章,從基礎的、具體的、細節的層面來做比較,做小結,恐怕對beginner而言,應該是有所裨益的,想來會比論壇裏的口水仗,抑或概念性的、大層面的比較要來得更爲實際一些吧
    Java
採用了CC++的語法格式,對於學習過CC++的程序設計者來說,學習Java將有可能很輕鬆。但是,如果仔細檢查Java語言的許多細節,就會發現Java取消了不少CC++的特性,並且加入了一些新的特性。這些差異包括:
o
不再有指針(Pointer)的概念。
   
這是JavaC/C++在語法上的主要區別之一。在CC++中,指針的靈活運用將會給程序設計帶來極大的便利,但是其靈活性也成爲了導致程序不穩定的一個主要因素。配合CC++的內存管理策略,編程人員必須親自跟蹤自己向系統申請到的內存,最後確認交還給系統。並且在使用指針時,要隨時注意是否超過合法的內存空間,造成Segmentation FaultGeneral Protection Fault這樣的問題。
    Java
提供了一種引用(Reference)類型用來替代指針,通過引用去訪問申請到的內存空間,可以確保不會訪問不屬於自己的內存空間,同時,程序的執行系統也可以動態地做內存垃圾回收工作,將那些被取消引用的內存空間回收給系統使用。這種動態內存分配機制,通過犧牲一定的靈活性,保證了內存分配一定程度上的安全性。
    o
不再有函數(Function)的概念。
Java
編程語言中,取消了結構化語言中最重要的部分--函數。在面向對象程序設計的概念裏,對象的數據纔是真正的主題,而處理對象數據的方法則必須依附在對象內纔有意義。因此函數概念完全是不必要的。這強化了面向對象的開發策略。
    o
不再使用structureuniontypedef
事實上,在C++中就可以去掉C中的structureunion等對複雜數據的自定義結構類型了,因爲類(Class)的定義方式完全可以做到這項功能。而typedef的功能也可以由類來實現。雖然C++這樣的設計是爲了和C兼容,但是這些畢竟是多餘的語言特點,在Java語言中便被拋棄了。
    o
不再有類的多重繼承(Multiple Inheritance)。
C++中,多重繼承是一項很強的功能,但也是較難掌握的。取消多重繼承降低了Java語言的功能,但它使Java看起來更爲簡潔。同時,Java也提供了接口(Interface)的方式,可以實現部分多重繼承的作用。和多重繼承的不同之處在於接口並不會定義類方法的內容,以及類中的數據。
    o
不再有操作符重載(Operator Overloading)。
操作符重載被看作是C++的一個特色。在C++中,利用操作符重載,程序設計者通過對現有運算符賦予自己的定義,可以使程序看起來更爲自然。但是,如果使用不當,也會使整個程序的可讀性大受影響。同時,這一功能的存在也並非必要,程序設計者可以定義類中的方法來達到同樣的目的。
    o
取消了自動類型轉換。
Java
是一種強類型檢查的編程語言,對於諸如浮點型變量賦值給整型變量這樣的情況而言,在C++的語法中是允許的,最多只是在編譯時給出警告信息。但是,在Java中,除非寫明強制類型轉換,否則編譯無法通過。
    o
不再有預處理器(preprocessor)功能。
利用C/C++中提供的#define#include等預處理指令,厲害的程序設計人員可以自己開發一套只有自己纔看得懂的宏指令集。從軟件工程的角度上看,這對團隊開發軟件和整個軟件的維護都是十分不利的。同時,預編譯後的程序代碼和程序設計者看到的程序代碼是不同的。如果宏指令集有錯,編譯器產生的錯誤信息將不會是編程人員所預期的,這增加了程序調試的難度。
    o
取消了goto語句。
C++中,goto語句已經不被建議使用了,保留goto只是爲了和C語法兼容。在Javagoto語句被完全拋棄了,與此同時,Java又擴大了break語句和continue語句的功能,通過使用breakcontinue,程序流程被允許在多層循環中跳轉。
   
可以這樣說,Java編程語言是一種簡潔而有效的純面向對象的編程語言。而C++語言因爲要與C兼容(C++語言是作爲C語言的一個超集被定義的),所以在面向對象的特性方面不如Java好。參考http://wenku.it168.com/d_000068621.shtml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章