• 沒有找到結果。

第三章 Eclipse 內涵

第一節 Java 程式語言簡介與基本應用

一、 Java 程式語言的內涵與背景

Java 程式語言的開發始於 1991 年昇陽公司(Sun Microsystems)於公司內部設立 了一個以 C++語言7 為基礎發展新的程式語言的專案,此專案在當時雖然一度面臨 取消的危機,但隨著 1993 年全球資訊網路(World Wide Web)的興起,昇陽公司評 估 Java 程式語言對於建立帶有互動介面和動畫的動態內容(dynamic content)類型網 頁上具有潛力,因此使得研究專案得以繼續,並在 1995 年的 5 月對外發布有關 Java 的消息。

而現在的 Java 則是由 Oracle 公司代理,按照用途分成標準版(Java Standard Edition, 簡稱為 Java SE)、企業版(Java Enterprise Edition, 簡稱為 Java EE, 用於大 型、分散式的網路應用)、精簡版(Java Micro Edition, 簡稱為 Java ME, 用於小型且 記憶體受限的裝置)。

Java 程式是由類別(class)所組成,類別之中包涵方法(method),它能夠執行工

作,並且也能在完成工作後回傳資訊。程式設計師可以依其所需建置自己所需的 各個類別,但也可以利用已經經過彙整的 Java 類別庫(Java class libraries, 後文以 API 簡稱之)來撰寫程式。8 因此,在以 Java 程式語言撰寫程式前,使用者必須先 熟悉 Java 的程式語言本身,進而能以此設計屬於自己的類別,同時,也得學習使 用各種不同的類別庫,才有辦法達到有效的應用。

二、 Java 程式的開發環境

Java 程式的開發需要經過五個階段:編輯(edit)、編譯(compile)、載入(load)、

驗證(verify)以及執行(execute),詳見說明。

(一) 第一階段:建立程式

建立程式所使用的是編輯器程式(editor program)又簡稱為編輯器(editor) 藉由鍵入 Java 程式碼(source code)的方式來編輯檔案。Java 原始碼程式的副檔 名(extension)為「.java」,許多軟體供應商都提供了 IDE 來支援軟體開發,包 括用來撰寫和編輯程式的編輯器,以及找出程式中邏輯錯誤的除錯器。

(二) 第二階段:將 Java 程式編譯為中間碼

在第二階段,程式設計師使用 Javac 指令來編譯程式,即為使用 Java 編譯 器(Java compile)來將原始碼編譯成中間碼(bytecode)。

舉例來說,假如要編譯名為“Music.java”的程式,需要將以下指令“Java Muisc.java”鍵入到系統的命令視窗,在常用的 Windows 中是命令列提示符號 (Command Prompt),在 Mac OS X 是終端應用視窗(Terminal application),程式

8 Java 類別庫又稱做為 Java API(Java Application Programming Interface, Java 應用程式 介面),是程式設計師使用(呼叫)的功能性程式,內涵多個函式及指令組合,由於和個別輸 入單一指令是相同的操作方式,對於設計師而言相對方便操作,像是 jMusic 即為一個 Java API。

編譯過後,編譯器會產生副檔名為“.class”的檔案。以上述例子而言,編譯過 的程式碼將以“Music.class”呈現。

這個階段所產生之中間碼即為第五階段中所要執行的工作。中間碼是以 Java 虛擬機器(Java Virtual Machine, 後文簡稱為 JVM)來執行,JVM 是屬於 JDK 的一部分,9 也是 Java 平台之基礎。虛擬機器(Virtual Machine, 後文簡稱 為 VM)是一種軟體應用程式,可以獨立於作業系統及硬體之外來模擬電腦運 作。因此當一個 VM 實作可以支援多個平台時,那麼藉由此 VM 所能執行的 程式也能在那些平台上使用,也因此使得 JVM 成為目前最廣泛使用的虛擬機 器之一。

但機器語言本身會因為電腦硬體不同而有所差異,唯獨中間碼是獨立於平 台的執行指令,因此可以說,Java 的中間碼具有可攜性,也是使得 Java 語言 可以跨平台使用的原因。

(三) 第三階段:將程式載入

程式執行前需先載入記憶體,以類別載入器(class loader)抓取檔案中內含

“.class”的檔案,並將其轉送至主記憶體中。類別載入器也裝載其他由 Java 程 式提供,在程式內需要的“.class”檔案。載入的途徑可以藉由系統磁碟或網路 兩個管道。

(四) 第四階段:驗證中間碼

在這個階段,藉由「中間碼驗證器」(bytecode verifier)檢查中間碼,確認

以 JVM 執行程式中間碼。現今典型的 JVM 是以「Java 熱點編譯器」(Java HotSpot compiler)以「直譯和即時編譯」(just-in-time compilation, 簡稱為 JIT) 的方式,分析解釋中間碼並找尋其中常用的熱點(hot spots),最後將中間碼編譯 成低階的機器語言,以加快其處理速度。

上列五個步驟套用到 Eclipse 程式的使用時,簡單的說,當在輸入編寫程式碼 時即為「編輯」階段,而若是在編寫過程中沒有任何錯誤的情況下,當儲存這個 檔案,程式本身就會自動完成「編譯」工作,後續三個步驟則是當使用 Eclipse 中 執行(run)選項時,在無形中自動完成。

三、 Java 程式編寫基本架構與列印字元

Java 語言的指令相當多樣化,基本上而言,Java 語言是一種「物件導向」(Object oriented)的程式語言。10 以這種語言設計稱為「物件導向程式設計」(Object-Oriented Programming, 後文簡稱 OOP)。在 Java 設計中,程式設計單元是用來具現化 (instantiate, 即為建立)物件的類別,而類別中包含方法(method, 用來實作運算,類 似 C 語言中的函式)和欄位(field, 用來實作屬性)。

而在編寫 Java 程式之前,首先必須要先分析成品所要達成的需求,進而才能 決定要如何編排程式碼,如何去寫出滿足這些需求的設計。而這種以物件導向的 觀 點 來 分 析 和 設 計 系 統 的 程 序 , 被 稱 為 是 一 種 物 件 導 向 分 析 與 設 計 成 序 (Object-Oriented Analysis and Design, 簡稱為 OOAD),這樣的方式對於程式社記者 而言不僅節省時間,甚至可以減少程式本身的犯錯率。

10 物件導向設計(Object-oriented design, 簡稱 OOD),將相同特徵的物件(object)歸類 為同一類別(class),同時 OOD 也具有繼承(inheritance)這種保有既存類別的特性,進而衍 生加入出自己獨立特性產生成新的物件類別的優點。另外,OOD 會將屬性和運算 (operatrion)封裝(encapsulate)成物件。

(一) 基本架構與列印字元:

在編寫 Java 程式前,先提供 Java 應用程式編寫時類別基礎架構範例(範例 一):

【範例一】Java 應用程式編寫基礎架構 1. public class Classname

2. {

3. public static void main ( String args [ ] ) 4. {

5. 程式內容 6. }

7. }

在這個基本的架構中含有幾個重要概念,首先是第一列“public class ClassName”為一個以 ClassName 為名的類別宣告(class declaration)。每個 Java 程式至少都要包含一個由設計師所設定的類別宣告,這種類別宣告是所謂的

「程式設計師定義類別」(programmer-defined classes)或是「使用者定義類別」

(user-defined classes) 。 這種類別宣告的開始是由其中的關鍵字 class(class keyword)引導,關鍵字又被稱為保留字(reserved words)有很多種,但都是由小 寫字母拼成。

後續接著的 ClassName 為類別名稱(class name),類別名稱的第一個字母 都要從大寫開始,但有時類別名稱是由多個字母組成的情況,此時當中的每 個單字的第一個字母也需使用大寫字母(像是例子中的 ClassName)。Java 類別 的名稱是一種識別字頭(identifier),其組成可以是一串字母也可以包含數字或 是底線(_)和金錢符號($),但不能以數字開頭,亦不能包含任何空白字元。另

點,識別字 main 之後的小括號(parentheses)代表程式的組合區塊,裡面放置的

則是方法宣告的主體部分(body of the method declaration),也就是這個方法具 體的執行方式。同時這裡也提供 Java 應用程式編寫的重要概念:在編寫過程 中有使用到大括號或是小括號都必須要左右成對,否則無法執行。

接著套入架構,命令 Eclipse 執行列印文字“This is beginning!”的指令,如 下列範例(範例二):

【範例二】列印文字範例 1. /* Print Example

2. (1)2 ways print one line 3. (2)Separate in different line 4. */

5.

6. public class PrintExample { 7.

8. // main method begins execution of Java application 9.

10. public static void main(String[] args) { 11.

12. System.out.println( "This is beginning!");

13.

14. /* System.out.println("This is ");

15. System.out.println("beginning!");*/

16.

17. //System.out.println("This\nis\nbeginning!");

18.

19. } 20.

21. }

在這段例子中,第 6 和 10 列的是基本架構中提出的兩個宣告,第十二列 大括號裡面的“System.out.print( "This is beginning!");”為這個方法的主體內 容,使電腦印出雙引號中的字串(string),方法的主體每一個指令都需要加上 分號(;),否則也會被視為一個錯誤。在這道指令中,System.out 是「標準輸出 物件」(standard output object),它允許 Java 應用程式在執行的命令式窗 (comment window)裡顯示字元,而 “.println”即為方法。

同一個例子中還有//和/*兩個符號,雙斜線稱為「單行註解符號」(single-line comments)或「行末註解符號」(end-of-line comments),使用時是以「// 註解 內容」的方式呈現,代表與此符號在同一列的內容電腦不會執行;而斜線加 上星號稱為「多行註解符號」(multiple-line comments),使用方式為「/*註解 內容*/」,和雙斜線符號類似的情況,只是在這符號間的多列內容會被電腦忽 略不予執行。這類註解的功能,除了方便設計者自己閱讀外,也助於其他人 閱讀並了解程式。

另外,在範例中的第 12 列“System.out.println( "This is beginning!");”和第 14、15 列“System.out.println ( "This is ");”加上“System.out.println ( "beginning!

");”的組合這兩種敘述式的編寫方式,雖然編寫方式不同,但兩者產生的結果 是一樣的,都會列印出"This is beginning!"的結果。同樣是不同的編寫方式,

第 17 列敘述式的“System.out.println("This\nis\nbeginning!");”的情況就和上方 兩種不同,由於中間加入了“\n”為一個換行字元,以至於在後面的字元會回到

反斜線符號(\)被稱為是逸出字元(escape character),它可以命令 System.out 物件的 println 方法輸出特殊字元(即為例子中接在\n 後方的字元),而這類的逸 出字元加上一個英文字元形成「逸出序列」(escape sequence)的不同有不同用 法,常見的逸出字元如下表(表 3-1-1):

【表 3-1-1】常見的逸出序列 逸 出 字

說明

\n 換行字元。將游標移到下一行起始處。

\t 水平定位鍵。將游標移到下一個定位點。

\r 歸位字元。將游標移回目前該行的開端,後續字元會覆蓋原先顯示字元。

\” 雙引號字元。可以列印出雙引號。

另 外 , 輸 出 時 的 方 式 還 有 一 種 為 格 式 化 輸 出 , 指 令 格 式 為

“System.out.printf(“%s”, “輸出內容”);”,其中的“%s”為一個佔位符號,所謂的 佔位符號是由一個百分比符號加上一個資料型別的英文字母組成,下表(表 3-1-2)列出其中四種:

【表 3-1-2】四種不同佔位符號

Java 符號 名稱

%s 字串的佔位符號

%d 整數資料的佔位符號

%f 浮點數資料的佔位符號

%b 布林值的佔位符號

佔位符號的使用,主要是在輸出內容包含多種型別時,為了簡化並且避 免錯誤,將輸出內容先選擇其中一種型別為主體,其餘的為佔位符號的型式 代替。舉例來說,假如要輸出 “I am 24 years old.”這句話,在輸出時,可以選 擇以字串為主體,分離出整數型別的 24 的方式,寫成 “System.out.printf(”I am

%d years old.”, 24);

”,如此,就能在輸出時避免型別不符而出現錯誤的可能性。這種佔位符 號也能在輸出內容包含多種型別的狀況下使用,能藉此省去針對各種不同型 別個別輸出的繁複手續,改以一次輸出的方式完成。

(二) 基本資料型別(primitive data type):

型別(type)在 Java 這種規類為強調型別語言(strongly typed language)的程 式語言中是一個不可或缺的要素。在 Java 語言的編寫過程當中,若是遇到使 用變數的情況時,對於每個變數都必須加以定義一個型別。而型別的不同,

型別(type)在 Java 這種規類為強調型別語言(strongly typed language)的程 式語言中是一個不可或缺的要素。在 Java 語言的編寫過程當中,若是遇到使 用變數的情況時,對於每個變數都必須加以定義一個型別。而型別的不同,

相關文件