當前位置:才華齋>計算機>java語言>

java語言特點總結

java語言 閱讀(2.34W)

Java是一門面向物件程式語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以理解的多繼承、指標等概念,下面是小編分享的java語言特點總結,一起來看一下吧。

java語言特點總結

1. 簡單、面向物件和為人所熟悉

java的簡單首先體現在精簡的系統上,力圖用最小的系統實現足夠多的功能;對硬體的要求不高,在小型的計算機上便可以良好的執行。和所有的新一代的程式設計語言一樣,java也採用了面向物件技術並更加徹底,所有的java程式和applet程式均是物件,封裝性實現了模組化和資訊隱藏,繼承性實現了程式碼的複用,使用者可以建立自己的類庫。而且java採用的是相對簡單的面向物件技術,去掉了運算子過載、多繼承的複雜概念,而採用了單一繼承、類強制轉換、多執行緒、引用(非指標)等方式。無用記憶體自動回收機制也使得程式設計師不必費心管理記憶體,是程式設計更加簡單,同時大大減少了出錯的可能。java語言採用了C語言中的大部分語法,熟悉C語言的程式設計師會發現java語言在語法上與C語言極其相似。

2. 魯棒並且安全

java語言在編譯及執行程式時,都要進行嚴格的檢查。作為一種強制型別語言,java在編譯和連線時都進行大量的型別檢查,防止不匹配問題的發生。如果引用一個非法型別、或執行一個非法型別操作,java將在解釋時指出該錯誤。在java程式中不能採用地址計算的方法通過指標訪問記憶體單元,大大減少了錯誤發生的可能性;而且java的陣列並非用指標實現,這樣就可以在檢查中避免陣列越界的發生。無用記憶體自動回收機制也增加了java的魯棒性。

作為網路語言,java必須提供足夠的安全保障,並且要防止病毒的侵襲。java在執行應用程式時,嚴格檢查其訪問資料的許可權,比如不允許網路上的應用程式修改本地的資料。下載到使用者計算機中的位元組程式碼在其被執行前要經過一個核實工具,一旦位元組程式碼被核實,便由java直譯器來執行,該直譯器通過阻止對記憶體的直接訪問來進一步提高java的安全性。同時java極高的魯棒性也增強了java的安全性。

3. 結構中立並且可以移植

網路上充滿了各種不同型別的機器和作業系統,為使java程式能在網路的任何地方執行,java編譯器編譯生成了與體系結構無關的位元組碼結構檔案格式。任何種類的計算機,只有在其處理器和作業系統上有java執行時環境,位元組碼檔案就可以在該計算機上執行。即使是在單一系統的計算機上,結構中立也有非常大的作用。隨著處理器結構的不斷髮展變化,程式設計師不得不編寫各種版本的程式以在不同的處理器上執行,這使得開發出能夠在所有平臺上工作的軟體集合是不可能的。而使用java將使同一版本的應用程式可以執行在所有的平臺上。

體系結構的中立也使得java系統具有可移植性。java執行時系統可以移植到不同的處理器和作業系統上,java的編譯器是由java語言實現的`,直譯器是由java語言和標準C語言實現的,因此可以較為方便的進行移植工作。

4. 高效能

雖然java是解釋執行的,但它仍然具有非常高的效能,在一些特定的CPU上,java位元組碼可以快速的轉換成為機器碼進行執行。而且java位元組碼格式的設計就是針對機器碼的轉換,實際轉換時相當簡便,自動的暫存器分配與編譯器對位元組碼的一些優化可使之生成高質量的程式碼。隨著java虛擬機器的改進和"即時編譯"(just in time)技術的出現使得java的執行速度有了更大的提高。

5. 解釋執行、多執行緒並且是動態的

為易於實現跨平臺性,java設計成為解釋執行,位元組碼本身包含了許多編譯時生成的資訊,使連線過程更加簡單。而多執行緒使應用程式可以同時進行不同的操作,處理不同的事件。在多執行緒機制中,不同的執行緒處理不同的任務,互不干涉,不會由於某一任務處於等待狀態而影響了其它任務的執行,這樣就可以容易的實現網路上的實時互動操作。java在執行過程中,可以動態的載入各種類庫,這一特點使之非常適合於網路執行,同時也非常有利於軟體的開發,即使是更新類庫也不必重新編譯使用這一類庫的應用程式。

java與C/C++語言的比較

a. 全域性變數

java程式不能定義程式的全域性變數,而類中的公共、靜態變數就相當於這個類的全域性變數。這樣就使全域性變數封裝在類中,保證了安全性,而在C/C++語言中,由於不加封裝的全域性變數往往會由於使用不當而造成系統的崩潰。

b. 條件轉移指令

C/C++語言中用goto語句實現無條件跳轉,而java語言沒有goto語言,通過例外處理語句try、catch、finally來取代之,提高了程式的可讀性,也增強了程式的魯棒性。

c. 指標

指標是C/C++語言中最靈活,但也是最容易出錯的資料型別。用指標進行記憶體操作往往造成不可預知的錯誤,而且,通過指標對記憶體地址進行顯示型別轉換後,可以類的私有成員,破壞了安全性。在java中,程式設計師不能進行任何指標操作,同時java中的陣列是通過類來實現的,很好的解決了陣列越界這一C/C++語言中不做檢查的缺點。

d. 記憶體管理

在C語言中,程式設計師使用庫函式malloc()和free()來分配和釋放記憶體,C++語言中則是運算子new和。再次釋放已經釋放的記憶體塊或者釋放未被分配的記憶體塊,會造成系統的崩潰,而忘記釋放不再使用的記憶體塊也會逐漸耗盡系統資源。在java中,所有的資料結構都是物件,通過運算子new分配記憶體並得到物件的使用權。無用記憶體回收機制保證了系統資源的完整,避免了記憶體管理不周而引起的系統崩潰。

e. 資料型別的一致性

在C/C++語言中,不同的平臺上,編譯器對簡單的資料型別如int、float等分別分配不同的位元組數。例如:int在IBM PC上為16位,在VAX-11上就為32位,導致了程式碼資料的不可移植。在java中,對資料型別的位數分配總是固定的,而不管是在任何的計算機平臺上。因此就保證了java資料的平臺無關性和可移植性。

f. 型別轉換

在C/C++語言中,可以通過指標進行任意的型別轉換,不安全因素大大增加。而在java語言中系統要對物件的處理進行嚴格的相容性檢查,防止不安全的轉換。

g. 標頭檔案

在C/C++語言中使用標頭檔案宣告類的原型和全域性變數及庫函式等,在大的系統中,維護這些標頭檔案是非常困難的。java不支援標頭檔案,類成員的型別和訪問許可權都封裝在一個類中,執行時系統對訪問進行控制,防止非法的訪問。同時,java中用import語句與其它類進行通訊,以便訪問其它類的物件。

h. 結構和聯合

C/C++語言中用結構和聯合來表示一定的資料結構,但是由於其成員均為公有的,安全性上存在問題。java不支援結構和聯合,通過類把資料結構及對該資料的操作都封裝在類裡面。

i. 預處理

C/C++語言中有巨集定義,而用巨集定義實現的程式碼往往影響程式的可讀性,而java不支援巨集定義。