1.2.4 Java語言的特點(2)
4. 高性能
雖然java是解釋執(zhí)行的,但它仍然具有非常高的性能,在一些特定的CPU上,java字節(jié)碼可以快速的轉換成為機器碼進行執(zhí)行。而且java字節(jié)碼格式的設計就是針對機器碼的轉換,實際轉換時相當簡便,自動的寄存器分配與編譯器對字節(jié)碼的一些優(yōu)化可使之生成高質量的代碼。隨著java虛擬機的改進和"即時編譯"(just in time)技術的出現(xiàn)使得java的執(zhí)行速度有了更大的提高。
5. 解釋執(zhí)行、多線程并且是動態(tài)的
如果你了解C語言和C++語言,可以參考下列java與C/C++語言的比較,如果不了解C語言和C++語言,可以忽略本部分知識。
a. 全局變量
java程序不能定義程序的全局變量,而類中的公共、靜態(tài)變量就相當于這個類的全局變量。這樣就使全局變量封裝在類中,保證了安全性,而在C/C++語言中,由于不加封裝的全局變量往往會由于使用不當而造成系統(tǒng)的崩潰。 來源:www.examda.com
b. 條件轉移指令
C/C++語言中用goto語句實現(xiàn)無條件跳轉,而java語言沒有goto語言,通過例外處理語句try、catch、finally來取代之,提高了程序的可讀性,也增強了程序的魯棒性。
c. 指針
指針是C/C++語言中最靈活,但也是最容易出錯的數(shù)據(jù)類型。用指針進行內(nèi)存操作往往造成不可預知的錯誤,而且,通過指針對內(nèi)存地址進行顯示類型轉換后,可以類的私有成員,破壞了安全性。在java中,程序員不能進行任何指針操作,同時java中的數(shù)組是通過類來實現(xiàn)的,很好的解決了數(shù)組越界這一C/C++語言中不做檢查的缺點。
d. 內(nèi)存管理
在C語言中,程序員使用庫函數(shù)malloc()和free()來分配和釋放內(nèi)存,C++語言中則是運算符new和delete。再次釋放已經(jīng)釋放的內(nèi)存塊或者釋放未被分配的內(nèi)存塊,會造成系統(tǒng)的崩潰,而忘記釋放不再使用的內(nèi)存塊也會逐漸耗盡系統(tǒng)資源。在java中,所有的數(shù)據(jù)結構都是對象,通過運算符new分配內(nèi)存并得到對象的使用權。無用內(nèi)存回收機制保證了系統(tǒng)資源的完整,避免了內(nèi)存管理不周而引起的系統(tǒng)崩潰。
e. 數(shù)據(jù)類型的一致性
在C/C++語言中,不同的平臺上,編譯器對簡單的數(shù)據(jù)類型如int、float等分別分配不同的字節(jié)數(shù)。例如:int在IBM PC上為16位,在VAX-11上就為32位,導致了代碼數(shù)據(jù)的不可移植。在java中,對數(shù)據(jù)類型的位數(shù)分配總是固定的,而不管是在任何的計算機平臺上。因此就保證了java數(shù)據(jù)的平臺無關性和可移植性。
f. 類型轉換
在C/C++語言中,可以通過指針進行任意的類型轉換,不安全因素大大增加。而在java語言中系統(tǒng)要對對象的處理進行嚴格的相容性檢查,防止不安全的轉換。
g. 頭文件
在C/C++語言中使用頭文件聲明類的原型和全局變量及庫函數(shù)等,在大的系統(tǒng)中,維護這些頭文件是非常困難的。java不支持頭文件,類成員的類型和訪問權限都封裝在一個類中,運行時系統(tǒng)對訪問進行控制,防止非法的訪問。同時,java中用import語句與其它類進行通信,以便訪問其它類的對象。
h. 結構和聯(lián)合
C/C++語言中用結構和聯(lián)合來表示一定的數(shù)據(jù)結構,但是由于其成員均為公有的,安全性上存在問題。java不支持結構和聯(lián)合,通過類把數(shù)據(jù)結構及對該數(shù)據(jù)的操作都封裝在類里面。
i. 預處理
C/C++語言中有宏定義,而用宏定義實現(xiàn)的代碼往往影響程序的可讀性,而java不支持宏定義
為易于實現(xiàn)跨平臺性,java設計成為解釋執(zhí)行,字節(jié)碼本身包含了許多編譯時生成的信息,使連接過程更加簡單。而多線程使應用程序可以同時進行不同的操作,處理不同的事件。在多線程機制中,不同的線程處理不同的任務,互不干涉,不會由于某一任務處于等待狀態(tài)而影響了其它任務的執(zhí)行,這樣就可以容易的實現(xiàn)網(wǎng)絡上的實時交互操作。java在執(zhí)行過程中,可以動態(tài)的加載各種類庫,這一特點使之非常適合于網(wǎng)絡運行,同時也非常有利于軟件的開發(fā),即使是更新類庫也不必重新編譯使用這一類庫的應用程序。
4. 高性能
雖然java是解釋執(zhí)行的,但它仍然具有非常高的性能,在一些特定的CPU上,java字節(jié)碼可以快速的轉換成為機器碼進行執(zhí)行。而且java字節(jié)碼格式的設計就是針對機器碼的轉換,實際轉換時相當簡便,自動的寄存器分配與編譯器對字節(jié)碼的一些優(yōu)化可使之生成高質量的代碼。隨著java虛擬機的改進和"即時編譯"(just in time)技術的出現(xiàn)使得java的執(zhí)行速度有了更大的提高。
5. 解釋執(zhí)行、多線程并且是動態(tài)的
如果你了解C語言和C++語言,可以參考下列java與C/C++語言的比較,如果不了解C語言和C++語言,可以忽略本部分知識。
a. 全局變量
java程序不能定義程序的全局變量,而類中的公共、靜態(tài)變量就相當于這個類的全局變量。這樣就使全局變量封裝在類中,保證了安全性,而在C/C++語言中,由于不加封裝的全局變量往往會由于使用不當而造成系統(tǒng)的崩潰。 來源:www.examda.com
b. 條件轉移指令
C/C++語言中用goto語句實現(xiàn)無條件跳轉,而java語言沒有goto語言,通過例外處理語句try、catch、finally來取代之,提高了程序的可讀性,也增強了程序的魯棒性。
c. 指針
指針是C/C++語言中最靈活,但也是最容易出錯的數(shù)據(jù)類型。用指針進行內(nèi)存操作往往造成不可預知的錯誤,而且,通過指針對內(nèi)存地址進行顯示類型轉換后,可以類的私有成員,破壞了安全性。在java中,程序員不能進行任何指針操作,同時java中的數(shù)組是通過類來實現(xiàn)的,很好的解決了數(shù)組越界這一C/C++語言中不做檢查的缺點。
d. 內(nèi)存管理
在C語言中,程序員使用庫函數(shù)malloc()和free()來分配和釋放內(nèi)存,C++語言中則是運算符new和delete。再次釋放已經(jīng)釋放的內(nèi)存塊或者釋放未被分配的內(nèi)存塊,會造成系統(tǒng)的崩潰,而忘記釋放不再使用的內(nèi)存塊也會逐漸耗盡系統(tǒng)資源。在java中,所有的數(shù)據(jù)結構都是對象,通過運算符new分配內(nèi)存并得到對象的使用權。無用內(nèi)存回收機制保證了系統(tǒng)資源的完整,避免了內(nèi)存管理不周而引起的系統(tǒng)崩潰。
e. 數(shù)據(jù)類型的一致性
在C/C++語言中,不同的平臺上,編譯器對簡單的數(shù)據(jù)類型如int、float等分別分配不同的字節(jié)數(shù)。例如:int在IBM PC上為16位,在VAX-11上就為32位,導致了代碼數(shù)據(jù)的不可移植。在java中,對數(shù)據(jù)類型的位數(shù)分配總是固定的,而不管是在任何的計算機平臺上。因此就保證了java數(shù)據(jù)的平臺無關性和可移植性。
f. 類型轉換
在C/C++語言中,可以通過指針進行任意的類型轉換,不安全因素大大增加。而在java語言中系統(tǒng)要對對象的處理進行嚴格的相容性檢查,防止不安全的轉換。
g. 頭文件
在C/C++語言中使用頭文件聲明類的原型和全局變量及庫函數(shù)等,在大的系統(tǒng)中,維護這些頭文件是非常困難的。java不支持頭文件,類成員的類型和訪問權限都封裝在一個類中,運行時系統(tǒng)對訪問進行控制,防止非法的訪問。同時,java中用import語句與其它類進行通信,以便訪問其它類的對象。
h. 結構和聯(lián)合
C/C++語言中用結構和聯(lián)合來表示一定的數(shù)據(jù)結構,但是由于其成員均為公有的,安全性上存在問題。java不支持結構和聯(lián)合,通過類把數(shù)據(jù)結構及對該數(shù)據(jù)的操作都封裝在類里面。
i. 預處理
C/C++語言中有宏定義,而用宏定義實現(xiàn)的代碼往往影響程序的可讀性,而java不支持宏定義
為易于實現(xiàn)跨平臺性,java設計成為解釋執(zhí)行,字節(jié)碼本身包含了許多編譯時生成的信息,使連接過程更加簡單。而多線程使應用程序可以同時進行不同的操作,處理不同的事件。在多線程機制中,不同的線程處理不同的任務,互不干涉,不會由于某一任務處于等待狀態(tài)而影響了其它任務的執(zhí)行,這樣就可以容易的實現(xiàn)網(wǎng)絡上的實時交互操作。java在執(zhí)行過程中,可以動態(tài)的加載各種類庫,這一特點使之非常適合于網(wǎng)絡運行,同時也非常有利于軟件的開發(fā),即使是更新類庫也不必重新編譯使用這一類庫的應用程序。