Java語言的優勢

接下來將介紹Java語言的優勢以及好處,若學員己經對Java有所了解,可直接略過本節。

  • Java是簡單的

Java語言相當容易撰寫且容易學習,並且去除了許多C/C++語言中容易令人造成混淆的功能與:如運算元多載(Operator Overloading)、多重繼承(Muti-Inheritance)以及自動強迫同型(Automatic coercion)。因此撰寫Java語言的門檻相當低,不需要像其他程式如C/C++語言必須進行許多深奧的訓練,當然如果要將Java語言寫的爐火純菁,遊刃有餘的情況還是得在基本原理以及概念上下一翻苦功。Java語言另一項特點是沒有指標(Pointer)語法,指標向來一直是C/C++初學者入門時一個很大的挑戰,Java利用特別的方式將指標的操作隱藏起來,讓使用者在撰寫程式時無法很明顯的感受到指標的存在,當然這也將可以必免掉許多因使用指標所帶來的記憶體操作問題。以上種種特性一在的表現出Java是個相當適合作為初學者初入程式設計領域的語言,利用Java語言撰寫程式其實是一件相當快樂且幸福的事。

Java VM具有自動記憶體垃圾收集器(Automatic grabage collection)的功能,因此在撰寫Java程式語言時並不太需要叱記憶體配置與管理的問題。Java VM會每隔一段時間,或是當記憶體配置不夠用時,呼叫垃圾收集器起來針對一些己經用不到的的物件進行記憶體釋放的動作,這與C/C++需自己釋放記憶體動作比起來,可以解化使用者在程式設計上的復雜度,使用者只需專心針對程式的內容做設計,而不需在對記憶體管理問題傷腦筋。

  • 物件導向

Java本身即為物件導向式的語言,因為Java函式庫都是以物件導向方式所開發的,因此Java提供了非常良好的一個物件導向程式的建置環境,利用Java所開發的程式可以相當有彈性。使用者只需把重心放在如何的設計物件與物件之間的架構關係,其他的問題就交給Java編譯器及JavaVM來為我們處理。

  • 分散式

Java可以說是為了網路而存在,Java本身提供了相當大強大的網路支援,可以讓使用者相當輕易的撰寫各式網路應用程式,並讓網路上不同平台的電腦可以互相的溝通。

  • 跨平台

跨平台可以說是Java所主打的一項特色,Java主要是運作於Java虛擬機器上(Java Virtual Machine),因此,你所撰寫的程可以完全不經過重新編譯,便能運行在任何一個有實作有實作Java虛擬機器的平台上。現今Sun或其他非官方的公司提供了相當多的Java VM,機乎絕大部份的作業系統平台都能找到相容的Java VM,因此利用Java所撰寫的程式可以輕易的跨越在不同的平台上執行。

  • 直譯性

在直譯性語言方面最為人所知的就是BASIC語言了,Basic程式語言是一行一的執行,而不是先確認所有的語法邏輯是否正確後再執行,另外編譯性的語言就如同C/C++先將所有的程式碼編譯成執行環境平台的機械碼後電腦在一口氣執行這些機械碼。直譯與編譯性語言都各有其優缺點,Java語言則結合了編譯性與直譯性的優點,Java語言屬於編譯性(Compiler)先將所有的語言編成為位元碼(ByteCode),接著在將這些位元利用直譯的方式於JavaVM上面執行,雖然C/C++在編譯後也會產生類似的位元碼(Object Code)但是這些位元碼在不同的系統環境中就需要重新的編譯一次,例如從Unix環境轉換成Windows的環境就需重新編譯,但是Java語言則不需要,因此Java程式可以輕易的具備跨平台的能力。下圖為Java程式的運作流程,從中可以了解Java是如何利用直譯的方式達到跨平台的能力。

Java跨平台運作過程

圖 11 Java運作流程

Java 主要是執行於Jvm虛擬機器上,所以在編譯時只需轉換成JVM看的懂的JavaByteCode,其他不同平台之間執行的問題就全交給JVM在執行時期在做直譯的動作,將ByteCode轉換成不同平台的機械碼。而JavaByteCode就存在於編譯後的.class檔之中,以下範例為一個未經編與的Java程式碼與編譯後的JavaByteCode對照。

//Java 範例程式原始碼
//經編譯後的Byte Code
  • 強韌性

Java語法定義的相當嚴謹且明確,利用Java語言所撰寫的程式相對的具有可靠度。另外Java也排除了容易造成錯誤的指標功能,並利用記憶體回收器(Garbage Collection)與例外事件處理(Exception Handle),來提高Java程式的強韌性。

  • 安全

Java平台其主要的特性就是應用於網路及分散式系統的運算。所以安全性與穩定性為當初建構Java時最優先的考量,因此在預設權限存取情況下,Java在網路上的程式沒有辦法存取及修改本地端上的檔案與資料,這一相當安全的一項設計。當我們在本地端執行Java程式時,Java平台就像是一層安全防護閘門,將任何企圖存取本地端檔案資料的動作阻絕掉,以確保本地端資料不會遭到修改或外流。

  • 架構中立

現今網路上的電腦或資訊裝置可以說是五化八門(個人電腦、手機、PDA、大型工作站),許多不同的電腦所採用的硬體架構皆不盡相同,處理器的種類可能16bit、32bit或64bit,所採用的指令集也有所差異,對於未來的電腦構架會出現什麼樣的變化我們更是無法掌握,但是透過JavaVM定義規格中所產生的中立性的物件,可以讓這些位元碼得以在不同處理器的電腦中執行。

  • 高效能

Java是一個高效能的程式語言,這個說法可能有許人都不讚同,但是需注意到Java並非是為某一個平特定平台所設計的語言,而是將程式碼先轉換成位元碼(ByteCode)在執行時期才依不同平台將位元碼轉換成對應該平台的機械碼。其實Java程式由位元碼轉透過JavaVM轉換成機械碼所花費的時間與C/C++效能機乎是沒有什麼分別的(註),但是JavaVM啓動需要花費一些時間進行初始化以及進行記憶體分配的動作,所以在初次執行Java程式會感覺到有點慢,但在第二次重覆執行時便會不需要在花費時間進行載入動作。

  • 多執行緒

所謂的多執行緒,就是多工的意思( 代表在同一個時間內,可以做許多不同的事情),就像有些人在吃飯時可以一邊看電視同時一邊進行呼吸與思考的動作,Java語言當初在推出時這算是一項蠻重大的特色,當初本質上支持多執行緒的語言本不多,不過目前許多其他的語言如C#、C++、VB等都己經可以達到多執行緒的功能了。

  • 動態鏈結

由於Java是利用位元碼於執行期間再進行翻譯的動作,程式可以在執行期間載入物件並對同時決定與確認對物件的存取條件,因此Java程式相當好的動態性,可以在不停止原程式的運作下,自由的加入新的方法或變數或是更換掉原有的物件,而不妨礙原有程式的正確性。