四、Java和C、C++
對(duì)于變量聲明、參數(shù)傳遞、操作符、流控制等,Java使用了和C、C++相同的傳統(tǒng),使得熟悉C、C++的程序員能很方便地進(jìn)行編程。同時(shí),Java為了實(shí)現(xiàn)其簡(jiǎn)單、魯棒、安全等特性,也摒棄了C和C++中許多不合理的內(nèi)容。
1.全局變量
Java程序中,不能在所有類之外定義全局變量,只能通過在一個(gè)類中定義公用、靜態(tài)的變量來實(shí)現(xiàn)一個(gè)全局變量。例如:
ClassGlobalVar{
publicstaticglobal_var;
}
在類GlobalVar中定義變量global_var為publicstat-ic,使得其它類可以訪問和修改該變量。
Java對(duì)全局變量進(jìn)行了更好的封裝。而在C和C++中,依賴于不加封裝的全局變量常常造成系統(tǒng)的崩潰。
2.Goto
Java不支持C、C++中的goto語句,而是通過例外處理語句try,Catch,final等來代替C、C++中用goto來處理遇到錯(cuò)誤時(shí)跳轉(zhuǎn)的情況,使程序更可讀且更結(jié)構(gòu)化。
3.指針
指針是C、C++中最靈活,也是最容易產(chǎn)生錯(cuò)誤的數(shù)據(jù)類型。由指針?biāo)M(jìn)行的內(nèi)存地址操作常會(huì)造成不可預(yù)知的錯(cuò)誤,同時(shí)通過指針對(duì)某個(gè)內(nèi)存地址進(jìn)行顯式類型轉(zhuǎn)換后,可以訪問一個(gè)C++中的私有成員,從而破壞安全性,造成系統(tǒng)的崩潰。而Java對(duì)指針進(jìn)行完全的控制,程序員不能直接進(jìn)行任何指針操作,例如把整數(shù)轉(zhuǎn)化為指針,或者通過指針釋放某一內(nèi)存地址等。同時(shí),數(shù)組作為類在Java中實(shí)現(xiàn),良好地解決了數(shù)組訪問越界這一C、C++中不作檢查的錯(cuò)誤。
4.內(nèi)存管理
在C中,程序員通過庫函數(shù)malloc()和free()來分配和釋放內(nèi)存,C++中則通過運(yùn)算符new和delete來分配和釋放內(nèi)存。再次釋放已釋放的內(nèi)存塊或未被分配的內(nèi)存塊,會(huì)造成系統(tǒng)的崩潰;同樣,忘記釋放不再使用的內(nèi)存塊也會(huì)逐漸耗盡系統(tǒng)資源。而在Java中,所有的數(shù)據(jù)結(jié)構(gòu)都是對(duì)象,通過運(yùn)算符new為它們分配內(nèi)存堆。通過new得到對(duì)象的處理權(quán),而實(shí)際分配給對(duì)象的內(nèi)存可能隨程序運(yùn)行而改變,Java對(duì)此自動(dòng)地進(jìn)行管理并且進(jìn)行垃圾收集,有效防止了由于程序員的誤操作而導(dǎo)致的錯(cuò)誤,并且更好地利用了系統(tǒng)資源。
5.數(shù)據(jù)類型的支持
在C、C++中,對(duì)于不同的平臺(tái),編譯器對(duì)于簡(jiǎn)單數(shù)據(jù)類型如int,float等分別分配不同長(zhǎng)度的字節(jié)數(shù),例如:int在IBMPC中為16位,在VAX-11中為32位,這導(dǎo)致了代碼的不可移植性,但在Java中,對(duì)于這些數(shù)據(jù)類型總是分配固定長(zhǎng)度的位數(shù),如對(duì)int型,它總占32位,這就保證了Java的平臺(tái)無關(guān)性。
6.類型轉(zhuǎn)換
在C、C++中,可以通過指針進(jìn)行任意的類型轉(zhuǎn)換,常常帶來不安全性,而Java中,運(yùn)行時(shí)系統(tǒng)對(duì)對(duì)象的處理要進(jìn)行類型相容性檢查,以防止不安全的轉(zhuǎn)換。
7.頭文件
C、C++中用頭文件來聲明類的原型以及全局變量、庫函數(shù)等,在大的系統(tǒng)中,維護(hù)這些頭文件是很困難的。而Java不支持頭文件,類成員的類型和訪問權(quán)限都封裝在一個(gè)類中,運(yùn)行時(shí)系統(tǒng)對(duì)訪問進(jìn)行控制,防止對(duì)私有成員的操作。同時(shí),Java中用import語句來與其它類進(jìn)行通訊,以便使用它們的方法。
8.結(jié)構(gòu)和聯(lián)合
C、C++中的結(jié)構(gòu)和聯(lián)合中所有成員均為公有,這就帶來了安全性問題。Java中不包含結(jié)構(gòu)和聯(lián)合,所有的內(nèi)容都封裝在類中。
9.預(yù)處理
C、C++中用宏定義來實(shí)現(xiàn)的代碼給程序的可讀性帶來了困難。在Java中,不支持宏,它通過關(guān)鍵字final來聲明一個(gè)常量,以實(shí)現(xiàn)宏定義中廣泛使用的常量定義。
相關(guān)推薦:
2014年計(jì)算機(jī)等考上機(jī)六大注意事項(xiàng)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |