Java SE 6 技術手冊

1.2 Java 的特性

Java 本身是個程式語言,所以您可以從程式語言本身的特性來討論它,Java 擁有不同領域的平台,所以您可以從應用領域與平台的特性來探討它,更重要的是 Java 擁有許多活躍的社群、資源與開放原始碼(Open source)專案,這更是在討論 Java 時值得一提的特性。

1.2.1 語言特性

作為一個程式語言,Java 擁有許多重要的特性:簡單的(Simple)、物件導向的(Object-oriented)、網路的(Network-savvy)、解譯的(Interpreted)、堅固的(Robust)、安全的(Secure)、可攜的(Portable)、高效能的(High-performance)。以下我針對這幾個重要的特性來加以說明。

  • 簡單的(Simple)

    C/C++ 的功能強大是大家所皆知的,即使在眾多程式語言的競爭之下,C/C++ 仍舊在開發軟體的程式語言間佔有相當的地位,然而學習或使用 C/C++ 並不容易,很多時候開發人員並不需要使用到 C/C++ 的一些功能,但為了使用 C/C++ 卻得付出相當的學習成本、開發成本或維護成本。

    設計 Java 的成員們以長年的開發經驗判斷,在使用一些 C/C++ 的功能時,所得到的壞處可能多於好處(尤其是被一些沒有經驗的開發人員使用時),所以 Java 捨棄了 C/C++ 中一些較少使用、難以掌握或可能不安全的功能,像是指標(Pointer)、運算子重載(Operator overloading)、多重繼承(Multiple inheritance)等等。

    Java 除去一些 C/C++ 複雜或不安全的功能,並在許多開發人員常使用的特性上加以簡化而使之易於使用,例如字串在Java中的處理就更為簡單;Java 在設計時參考了許多 C/C++ 的語法與特性,使得學習過 C/C++ 的開發人員可以在短時間內瞭解如何使用 Java。

  • 物件導向的(Object-oriented)

    物件導向分析(Object-oriented Analysis)是分析問題的一種方式,物件導向設計(Object-oriented Design)是使用物件導向的思考方式來設計問題的解決方案。很不幸的,要瞭解什麼是物件導向,以及學會使用物件導向的方式進行設計與解決問題,並不是一件簡單的事情,事實上讓您瞭解物件導向正是這本書的目標之一。

    這邊您先不用急於瞭解什麼是物件導向,在往後的章節中我會逐漸以實際的例子讓您體會什麼是物件導向,現階段您所要瞭解的是,Java 支援物件導向的設計方式,簡單的說,Java 讓您可以用物件導向的思考與方式來設計並撰寫程式,物件導向的好處之一,就是可以讓您設計出可重用的元件,或者是直接使用別人所撰寫好的 Java 元件,並使開發出來的軟體更具彈性且容易維護。

  • 網路的(Network-savvy)

    Java 本身等於就是藉由網路而重生的,它的許多功能與應用都與網路相關,從最初的 Applet、簡化的 Socket、互動式的 JSP/Servlet 網路程式到今日熱門的 Web Service 等,都註定了 Java 在網路相關的領域佔有一席之地,事實 上Java 應用最多的領域也正是網路服務這一塊領域。

  • 解譯的(Interpreted)

    您要先知道一件事,程式在一個平台上要能夠執行,必須先編譯為該平台看得懂的原始機器指令(Native machine instructions),但最大的問題在於每個平台所認識的機器指令各不相同,例如 Windows 作業系統認識的機器指令就與 Linux 認識的不相同,專為 Windows 作業系統所撰寫並編譯好的程式,並無法直接拿來在 Linux 作業系統上執行。

    為了解決不同平台間執行程式的問題,Java 的程式在進行編譯時,並不直接編譯為與平台相依的原始機器指令,而是編譯為與系統無關的「位元碼」(bytecodes),為了要執行 Java 程式,執行的平台上必須安裝有 JVM(Java Virtual Machine),JVM 就是Java位元碼檔案的虛擬作業系統,Java 位元碼檔案就是 JVM 的可執行檔案,當運行 Java 程式時,Java 即時編譯器(Just In Time compiler, JIT)會將位元碼解譯為目標平台所認得的原始機器指令,藉由 JVM 使得 Java 程式在不同平台上都能執行的目的得以實現。

    JVM 將 Java 位元碼轉換為平台相依的機器指令

圖1.2. JVM 將 Java 位元碼轉換為平台相依的機器指令

良葛格的話匣子 「平台」(Platform)一詞並沒有較嚴謹的定義,在電腦的領域中,平台有時指的是硬體,有時指的是作用於硬體之上的軟體系統,有時則指硬體加上軟體,這邊指的平台是「作業系統」,由於不同的硬體會運行不同的作業系統,所以這邊對平台的定義也就是硬體加上軟體。 您可以在 Google 上搜尋 define:platform 來查詢網路上各種對平台的定義。

  • 堅固的(Robust)

    Java 將 C/C++ 中一些功能強大但不容易掌握的功能去除掉,以指標(Point)功能為例,即使是有經驗的開發人員在使用指標功能時也得小心翼翼,避免撰寫出使程式崩潰(Crash)的錯誤,諸如此類的功能在 Java 中被去除掉,為的是讓 Java 在使用時更為簡單,撰寫出來的程式更為堅固(Robust)。

    捨棄了 C/C++ 的一些特性曾使得許多開發人員質疑沒有了 C/C++ 這些特性,Java 還能開發什麼軟體?但從 Java 正式提出至今日10年來已經證明,Java 確實適用於開發各個領域的軟體,而且更擁有廣大的網路資源。

  • 安全的(Secure)

    Java 加入了自動垃圾收集(Garbage collection),讓開發人員無需擔心物件資源的回收問題,例外(Exception)處理架構讓開發人員可以掌握程式中各種突發的例外狀況,另外像是 synchronized、final 等存取關鍵詞的使用,目的都在於加強 Java 程式的安全性。

  • 可攜的(Portable)

    要讓程式跨平台並不是一件容易的事,有相當多的東西必須考量,例如資料型態所佔記憶體長度就是一個問題,Java 在不同的平台上之資料型態長度是統一的(而 C/C++ 則不然),這是 Java 在提高程式可攜性上最顯而易見的一個例子。

  • 高效能的(High-performance)

    高效能是 Java 所宣稱的,在某些條件的配合下,Java 號稱可以與 C/C++ 擁有同樣甚至更好的執行效能,但更多的人只是將這個宣稱視為一個商業宣傳的口號,Java 是在執行時期才將中介的位元碼轉譯為原始機器碼,這就花上了一段不短的啟動時間,而早期的 Java 在執行效能上確實是一直被詬病的。

    不過在歷經數個版本的變更,Java 一直嘗試提高其執行的效能,像是使 用Java HotSpot 技術,在第一次載入 Java 位元碼時,JIT 會以解譯模式開始載入,分析並嘗試以最佳化編譯為目標平台的原始機器碼。每一次的版本更新,Java皆嘗試在效能上作出改進。

1.2.2 應用平台

Java 至今日主要發展出三個領域的應用平台:Java Platform, Standard Edition (Java SE)、Java Platform, Enterprise Edition (Java EE) 與 Java Platform, Micro Edition (Java ME)。

  • Java Platform, Standard Edition (Java SE)

    Java SE 是 Java 各應用平台的基礎,想要學習其它的平台應用,必先瞭解 Java SE 以奠定基礎,Java SE 也正是本書主要的介紹對象。

    下圖是整個 Java SE 的組成概念圖:

    圖1.3. Java SE的組成概念圖

    圖1.3. Java SE的組成概念圖

    Java SE 可以分作四個主要的部份:**JVM、JRE、JDK 與Java語言**。
    

    為了要能運行 Java 所撰寫好的程式,您的平台上必須有 Java 虛擬機器(Java Virtual Machine, JVM)。 JVM 包括在 Java 執行環境(Java SE Runtime Environment, JRE)中,所以為了要運行 Java 程式,您必須取得 JRE 並進行安裝。如果您要開發 Java 程式,則您必須取得 JDK(Java SE Development Kits),JDK 包括了 JRE 以及開發過程中所需要的一些工具程式,像是 javac、java、appletviewer 等工具程式(關於 JRE 及 JDK 的安裝與使用介紹,會在第 2 章說明)。

    Java 語言只是 Java SE 的一部份,除了語言之外,Java 最重要的就是它提供了龐大且功能強大的 API 類別庫,提供像是字串處理、資料輸入輸出、網路套件、使用者視窗介面等功能,您可以使用這些 API 作為基礎來進行程式的開發,而無須重複開發功能相同的元件,事實上,在熟悉 Java 語言之後,更多的時候,您都是在學習如何使用 Java SE 所提供的 API 來組成您的程式。

  • Java Platform, Enterprise Edition (Java EE)

    隨著 Java 的應用領域越來越廣,並逐漸擴及至各級應用軟體的開發,Sun 公司在 1999 年 6 月美國舊金山的 Java One 大會上,公佈了新的 Java 體系架構,該架構根據不同級別的應用開發區分了不同的應用版本: J2SE、J2EE 與 J2ME。這些是當時的名稱,為配合 Java SE 6 中的名稱,以下則稱 為Java SE、JavaEE 與 Java ME。

    Java EE 以 Java SE 的基礎,定義了一系列的服務、API、協定等,適用於開發分散式、多層式(Multi-tiered)、以元件為基礎、以Web為基礎的應用程式,整個 ava EE 的體系是相當龐大的,比較為人所熟悉的技術像是 JSP、Servlet、Enterprise JavaBeans(EJB)、Java Remote Method Invocation(RMI)等,當中的每個服務或技術都可以使用專書進行說明,所以並不是本書說明的範圍,但可以肯定的是,您必須在 Java SE 上奠定良好的基礎再來學習 Java EE 的開發。

  • Java Platform, Micro Edition (Java ME)

    Java ME 是 Java 平台版本中最小的一個,目的是作為小型數位設備上開發及部署應用程式的平台,像是消費性電子產品或嵌入式系統等,最為人所熟悉的設備如手機、PDA、股票機等,在近幾年已經相當常見 Java ME 的應用,越來越多的手持裝置都支援 Java ME 所開發出來的程式,像是 Java 遊戲、股票相關程式、記事程式、月曆程式等。

良葛格的話匣子 Java SE 6?JDK6?JRE6?您已經搞不清楚這些名稱了嗎?這邊再做個整理。Java SE 是指平台名稱,全名 Java Platform, Standard Edition 6。JDK6 是基於平台的開發程式發行版本,全名 Java SE Development Kit 6。JRE6 則是基於平台的執行環境發行版,全名 Java SE Runtime Environment 6。

1.2.3 活躍的社群與豐富的資源

Java 發展至今日獲得廣大開發者的支援,有一個不得不提的特性,即 Java 所擁有的各種豐富資源與各式活躍的社群,來自各個領域的開發人員與大師們各自對 Java 作出了貢獻。

無論是開發工具、開放原始碼的元件、Web 容器、測試工具、各式各樣的軟件專案、各個社群所支持的討論區、取之不盡的文件等,這些資源來自於各個商業化或非商業化的團體,各式各樣活躍的社群造就 Java 無限的資源,這些資源不僅具有實質的應用價值,更具有教育的價值,例如各式各樣的開放原始碼框架(Framework)成品,不僅可以讓您將之使用於實際的產品開發上,還可以讓您從中學習框架的架構與運行機制,即使在某些產品開發上您不使用 Java 來開發程式,也可以運用到這些框架的架構與運行機制。