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