国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2019-11-18 11:50:21
字體:
供稿:網(wǎng)友

     [引子]這個話題并不新鮮,但是作為語言比較類的文章,從基礎(chǔ)的、具體的、細(xì)節(jié)的層面來做比較,做小結(jié),恐怕對beginner而言,應(yīng)該是有所裨益的,想來會比論壇里的口水仗,抑或概念性的、大層面的比較要來得更為實際一些吧
  
     java采用了C及C++的語法格式,對于學(xué)習(xí)過C及C++的程序設(shè)計者來說,學(xué)習(xí)Java將有可能很輕松。但是,假如仔細(xì)檢查Java語言的許多細(xì)節(jié),就會發(fā)現(xiàn)Java取消了不少C及C++的特性,并且加入了一些新的特性。這些差異包括:
  
  
     o 不再有指針(Pointer)的概念。
  
  
     這是Java和C/C++在語法上的主要區(qū)別之一。在C及C++中,指針的靈活運用將會給程序設(shè)計帶來極大的便利,但是其靈活性也成為了導(dǎo)致程序不穩(wěn)定的一個主要因素。配合C及C++的內(nèi)存治理策略,編程人員必須親自跟蹤自己向系統(tǒng)申請到的內(nèi)存,最后確認(rèn)交還給系統(tǒng)。并且在使用指針時,要隨時注重是否超過合法的內(nèi)存空間,造成Segmentation Fault或General PRotection Fault這樣的問題。
  
  
     Java提供了一種引用(Reference)類型用來替代指針,通過引用去訪問申請到的內(nèi)存空間,可以確保不會訪問不屬于自己的內(nèi)存空間,同時,程序的執(zhí)行系統(tǒng)也可以動態(tài)地做內(nèi)存垃圾回收工作,將那些被取消引用的內(nèi)存空間回收給系統(tǒng)使用。這種動態(tài)內(nèi)存分配機制,通過犧牲一定的靈活性,保證了內(nèi)存分配一定程度上的安全性。
  
  
     o 不再有函數(shù)(Function)的概念。
  
  
     Java編程語言中,取消了結(jié)構(gòu)化語言中最重要的部分--函數(shù)。在面向?qū)ο蟪绦蛟O(shè)計的概念里,對象的數(shù)據(jù)才是真正的主題,而處理對象數(shù)據(jù)的方法則必須依附在對象內(nèi)才有意義。因此函數(shù)概念完全是不必要的。這強化了面向?qū)ο蟮拈_發(fā)策略。
  
  
     o 不再使用strUCture、union和typedef。
  
  
     事實上,在C++中就可以去掉C中的structure和union等對復(fù)雜數(shù)據(jù)的自定義結(jié)構(gòu)類型了,因為類(Class)的定義方式完全可以做到這項功能。而typedef的功能也可以由類來實現(xiàn)。雖然C++這樣的設(shè)計是為了和C兼容,但是這些究竟是多余的語言特點,在Java語言中便被拋棄了。
  
  
     o 不再有類的多重繼續(xù)(Multiple Inheritance)。
  
  
     在C++中,多重繼續(xù)是一項很強的功能,但也是較難把握的。取消多重繼續(xù)降低了Java語言的功能,但它使Java看起來更為簡潔。同時,Java也提供了接口(Interface)的方式,可以實現(xiàn)部分多重繼續(xù)的作用。和多重繼續(xù)的不同之處在于接口并不會定義類方法的內(nèi)容,以及類中的數(shù)據(jù)。
  
  
     o 不再有操作符重載(Operator Overloading)。
  
  
     操作符重載被看作是C++的一個特色。在C++中,利用操作符重載,程序設(shè)計者通過對現(xiàn)有運算符賦予自己的定義,可以使程序看起來更為自然。但是,假如使用不當(dāng),也會使整個程序的可讀性大受影響。同時,這一功能的存在也并非必要,程序設(shè)計者可以定義類中的方法來達(dá)到同樣的目的。
  
  
     o 取消了自動類型轉(zhuǎn)換。
  
  
     Java是一種強類型檢查的編程語言,對于諸如浮點型變量賦值給整型變量這樣的情況而言,在C++的語法中是答應(yīng)的,最多只是在編譯時給出警告信息。但是,在Java中,除非寫明強制類型轉(zhuǎn)換,否則編譯無法通過。
  
  
     o 不再有預(yù)處理器(preprocessor)功能。
  
  
     利用C/C++中提供的#define、#include等預(yù)處理指令,厲害的程序設(shè)計人員可以自己開發(fā)一套只有自己才看得懂的宏指令集。從軟件工程的角度上看,這對團(tuán)隊開發(fā)軟件和整個軟件的維護(hù)都是十分不利的。同時,預(yù)編譯后的程序代碼和程序設(shè)計者看到的程序代碼是不同的。假如宏指令集有錯,編譯器產(chǎn)生的錯誤信息將不會是編程人員所預(yù)期的,這增加了程序調(diào)試的難度。
  
  
     o 取消了goto語句。
  
  
     在C++中,goto語句已經(jīng)不被建議使用了,保留goto只是為了和C語法兼容。在Java中g(shù)oto語句被完全拋棄了,與此同時,Java又?jǐn)U大了break語句和continue語句的功能,通過使用break和continue,程序流程被答應(yīng)在多層循環(huán)中跳轉(zhuǎn)。
  
  
     可以這樣說,Java編程語言是一種簡潔而有效的純面向?qū)ο蟮木幊陶Z言。而C++語言因為要與C兼容(C++語言是作為C語言的一個超集被定義的),所以在面向?qū)ο蟮奶匦苑矫娌蝗鏙ava好。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 故城县| 长阳| 化德县| 杨浦区| 东丽区| 饶河县| 山东省| 沙雅县| 巨野县| 富平县| 绥芬河市| 岐山县| 论坛| 杂多县| 象州县| 鄂托克旗| 海林市| 增城市| 赤壁市| 辽阳市| 岗巴县| 天长市| 台东市| 明溪县| 梁河县| 赤水市| 北票市| 阜南县| 徐州市| 抚顺县| 临安市| 梁平县| 札达县| 竹山县| 常山县| 渭南市| 吴川市| 富民县| 辉南县| 泽州县| 齐河县|