3 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
相同的地方:
1、語(yǔ)法類似:
由于Java可以算是從C++發(fā)展而來(lái)的,因此Java與C語(yǔ)言的語(yǔ)法比較類似
2、編程的熟練程度就是對(duì)語(yǔ)言程序庫(kù)的掌握程度:
從某種程度上來(lái)說(shuō),編程語(yǔ)言都是由語(yǔ)法和相應(yīng)的程序庫(kù)所構(gòu)成,Java有自身的類庫(kù),C語(yǔ)言則有標(biāo)準(zhǔn)庫(kù)。所謂的編程,就是使用與語(yǔ)法來(lái)調(diào)用和組合程序庫(kù)中的函數(shù)。
不同的地方:
1、內(nèi)存管理
在Java中,基本不用考慮內(nèi)存的問(wèn)題,如果想用一個(gè)對(duì)象,new一個(gè)就可以,這個(gè)過(guò)程的背后則是JRE為對(duì)象分類的一定內(nèi)存,當(dāng)JRE發(fā)現(xiàn)你不再使用這個(gè)對(duì)象的時(shí)候,他就會(huì)自動(dòng)回收內(nèi)存,也就是說(shuō)你只管借東西,不用管歸還,因?yàn)榕c有人當(dāng)你的跟班,在你不使用的時(shí)候就把東西歸還了,不過(guò)這個(gè)過(guò)程還是有的,只不過(guò)是JRE作的而已。
但是C則不同,如果你想用,你可以用malloc之類的方法申請(qǐng)內(nèi)存,當(dāng)你使用完了,因?yàn)闆](méi)有跟班的,你需要自己把這塊內(nèi)存歸還回去,也就是調(diào)用free方法來(lái)完成這個(gè)任務(wù)。由于需要顯式的歸還內(nèi)存,因此當(dāng)一個(gè)函數(shù)需要將一塊內(nèi)存返回給調(diào)用者的時(shí)候,問(wèn)題就比較復(fù)雜了,不如面向?qū)ο蠛途哂袃?nèi)存回收功能的Java那么直觀了。對(duì)于這個(gè)問(wèn)題,在C語(yǔ)言中,有幾種解決方案:
(1) 在調(diào)用者中先分配好內(nèi)存,作為參數(shù)傳入到被調(diào)用的函數(shù)中
(2) 在被調(diào)用的函數(shù)中分配,使用完后在調(diào)用者中釋放
(3) 在被調(diào)用函數(shù)中使用static變量,可以將該變量返回
2、面向?qū)ο?br/>Java的面向?qū)ο蟮奶攸c(diǎn)很明顯,而C則是一個(gè)地道的結(jié)構(gòu)化語(yǔ)言。 Java中有一個(gè)字符串類String, 通過(guò)調(diào)用 String.length()就可以知道字符串的長(zhǎng)度,但是在C語(yǔ)言中,則需要調(diào)用函數(shù)strlen(str)來(lái)得到字符串(字符數(shù)組)的長(zhǎng)度。由于C不是面向?qū)ο蟮恼Z(yǔ)言,也就沒(méi)有this的概念,因此當(dāng)使用一個(gè)與某個(gè)“東西”相關(guān)的函數(shù)時(shí),就需要不厭其煩的將代表這個(gè)“東西”的變量作為參數(shù)傳遞進(jìn)去。
3、名稱空間
Java通過(guò)包(package)來(lái)實(shí)現(xiàn)名稱空間,在C語(yǔ)言中,所有的函數(shù)都處于同一名稱空間,也就是沒(méi)有名稱空間,因此就會(huì)很多程序提供的api接口函數(shù)都有一個(gè)前綴,例如MYSQL的mysql_init(), mysql_real_connect(), mysql_real_query()等函數(shù)名稱前面的mysql_。

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
java是在C++的基礎(chǔ)上修改一些內(nèi)容得到的,還是屬于類c++語(yǔ)言
比如:java去掉了指針類型;沒(méi)有無(wú)符號(hào)數(shù)據(jù)類型;char類型是雙字節(jié)的;數(shù)組的寫(xiě)法和管理;等等
添加回答
舉報(bào)