81
本本本本 本本本本本本本 本本本本本本本本本本本本本本本本本本本本本本本本本本本 本本本本本 本本本 本本本本本本本本本本本 本本本本 本本本 本本本本本本本 本本 ()(),,、、( 本本本本本本本本本本本本本本本 80% 本本本本本本本本本本本本本本本 本本本本本本本本本本本本本本本本 本本本本本本本本本本本本本本本本本本 本本本本本本本本本 ),,、; 本本本本 本本本本本本本本本本本本本本本本 本本本本本本本本本本本本本本本本本本本本本本本本本本本本 ,,。 本本本本本 © 本本本本本本本本本本 本本 Java 本 2 本

SCJP ch02

Embed Size (px)

Citation preview

Page 1: SCJP ch02

本投影片(下稱教用資源)僅授權給採用教用資源相關之旗標書籍為教科書之授課老師(下稱老師)專用,老師為教學使用之目的,得摘錄、編輯、重製教用資源(但使用量不得超過各該教用資源內容之 80% )以製作為輔助教學之教學投影片,並於授課時搭配旗標書籍公開播放,但不得為網際網路公開傳輸之遠距教學、網路教學等之使用;除此之外,老師不得再授權予任何第三人使用,並不得將依此授權所製作之教學投影片之相關著作物移作他用。

著作權所有 © 旗標出版股份有限公司

初探 Java

第 2 章

Page 2: SCJP ch02

2

學習目標

準備開發程式的環境 撰寫、編譯與執行程式 認識 Java 程式的結構

Page 3: SCJP ch02

3

前言

在上一章中 , 已經簡單的介紹了有關程式語言最基本的概念 , 以及程式語言的分類 , 並且對於 Java 程式語言的演進也有了初步的瞭解。

接下來這一章 , 就要開始實際動手撰寫 Java 程式 ,

並且對於構成 Java 程式的基本要素 , 一一提出詳盡的解說。

Page 4: SCJP ch02

4

2-1 建置 Java 的程式開發環境

雖然市面上、網路上可找到不少具有整合開發環境 (I

DE) 的 Java 語言開發工具 , 像是昇陽 (Sun) 公司的 NetBeans IDE 、開放原始碼 (Open Source) 的 Eclipse 、以及 CodeGear 公司的 JBuilder 等。

不過初學者最好能親自用昇陽公司的 Java 開發套件 (JDK, Java SE Developement Kit) 來編譯及執行 Ja

va 程式 , 以便對 Java 有更深入的認識;等到將來比較熟練之後 , 再使用 IDE 來加快程式開發的速度。

因此本節將說明如何下載、安裝 JDK, 以及如何在 Windows 環境中建立 JDK 的執行環境。

Page 5: SCJP ch02

5

2-1-1 下載 JDK 及文件 若想取得最新 JDK 版本 , 可直接至昇陽公司的官方網站下載 , 請開啟瀏覽器 , 連上 "http://java.sun.co

m/javase/downloads/index.jsp " :

Page 6: SCJP ch02

6

下載 JDK 及文件

Page 7: SCJP ch02

7

下載 JDK 及文件

Page 8: SCJP ch02

8

下載 JDK 及文件

Page 9: SCJP ch02

9

下載 JDK 及文件

在下載 JDK 的同時 , 我們也可另行下載 JDK 的說明文件 , 請再次連上 "http://java.sun.com/javase/d

ownloads/index.jsp ", 向下捲動找到 "Java SE 6 Do

cumentation" 項目:

Page 10: SCJP ch02

10

下載 JDK 及文件

Page 11: SCJP ch02

11

下載 JDK 及文件

下載完畢 , 即可依下一單元介紹的方法進行安裝與設定。

Page 12: SCJP ch02

12

2-1-2 安裝 JDK 工具及文件

要安裝 JDK 很簡單 , 直接執行其安裝程式即可;至於文件則只要自行解壓縮到指定的目錄即可完成安裝。

Page 13: SCJP ch02

13

安裝 JDK 開發工具

要安裝 JDK 開發工具 , 請直接執行下載回來的安裝程式檔:

Page 14: SCJP ch02

14

安裝 JDK 開發工具

Page 15: SCJP ch02

15

安裝 JDK 開發工具

Page 16: SCJP ch02

16

安裝 JDK 開發工具

Page 17: SCJP ch02

17

安裝 JDK 開發工具

Page 18: SCJP ch02

18

安裝 JDK 開發工具

至此即安裝完成 , 稍後我們會介紹如何設定 Java

的工作環境 , 以方便使用 JDK 中的工具程式。

Page 19: SCJP ch02

19

安裝 JDK 說明文件

昇陽公司提供的 JDK 說明文件為 HTML 網頁格式 ,

而且是以壓縮檔的形式包裝 , 並未提供安裝程式 ,

我們只需將它解壓縮至想安裝的路徑即可:

Page 20: SCJP ch02

20

安裝 JDK 說明文件

Page 21: SCJP ch02

21

安裝 JDK 說明文件

解壓縮完畢後 , 切換到文件解壓縮的目錄 , 如下操作:

Page 22: SCJP ch02

22

安裝 JDK 說明文件

Page 23: SCJP ch02

23

安裝 JDK 說明文件

Page 24: SCJP ch02

24

2-1-3 設定開發環境 雖然 JDK 安裝好後即可使用 , 但由於安裝程式未替我們設定 Windows 環境變數 , 用起來並不方便 ,

因此要一勞永逸 , 就是在安裝後即設好相關環境變數。請按開始鈕 , 並依如下步驟進行設定:

Page 25: SCJP ch02

25

設定開發環境

Page 26: SCJP ch02

26

設定開發環境

Page 27: SCJP ch02

27

設定開發環境

Page 28: SCJP ch02

28

設定開發環境

Page 29: SCJP ch02

29

設定開發環境

Page 30: SCJP ch02

30

設定開發環境

設定好後不妨立即測試一下 , 請開啟命令提示字元視窗 ( 執行開始功能表的『所有程式 / 附屬應用程式 /

命令提示字元』命令 ) :

Page 31: SCJP ch02

31

設定開發環境

如果出現『 'javac' 不是內部或外部命令、可執行的程式或批次檔。』這樣的訊息 , 表示您的 Path 環境變數設定有誤 , 因此作業系統找不到 javac 執行檔所在的位置。

請再次確認您的 JDK 安裝路徑 , 並依前述的步驟重新設定環境變數。

Page 32: SCJP ch02

32

2-2 撰寫第一個 Java 程式

要使用 Java 程式語言 , 您必須先將依照 Java 語法撰寫的程式儲存在一個純文字檔案中 (副檔名一般都是用 .java), 然後再利用 Java 程式語言的編譯器轉譯程式 , 將您所撰寫的 Java 程式轉譯成 Java

虛擬機器的機器碼 , 也稱為 Byte Code 。 然後再使用 Java 虛擬機器來執行轉譯出來的機器碼。

如果執行結果有問題 , 就必須回頭修改程式 , 再重複前面所描述的步驟。

Page 33: SCJP ch02

33

撰寫第一個 Java 程式

以下就帶領大家依據上述的步驟 , 完成第 1 個 Jav

a 程式。

Page 34: SCJP ch02

34

2-2-1 使用文字編輯器撰寫程式

要撰寫 Java 程式 , 必須使用文字編輯器 (Text Ed

itor), 像是 Windows 所內附的記事本 , 或者是坊間一般流行的 UltraEdit 這類付費軟體來撰寫 , 而不是使用 Word 這一類的文書處理軟體。

您也可以在網路上找到許多功能不錯、免費的文字編輯器 , 像是 Crimson Editor 、 VIM 等等。

Page 35: SCJP ch02

35

為什麼不能使用文書處理軟體撰寫 Java 程式

像是 Word 之類的文書處理軟體 , 由於必須記錄段落文字的樣式 (大小、顏色、字體 ) , 因此除了您鍵入的文字以外 , 儲存檔案時還會儲存許多相關文字樣式的資訊 , 而且預設會以其自訂的格式儲存文字與相關資訊。

Java 編譯器既不認得這些文書處理軟體的檔案格式 ,

也無法認得其中所儲存的相關資訊 , 因此無法正確編譯程式 , 所以請不要使用文書處理軟體來撰寫程式。

Page 36: SCJP ch02

36

使用文字編輯器撰寫程式

現在 , 就請您使用文字編輯器 , 撰寫如下的程式:

▪ 請特別注意 , 鍵入程式的時候並不包含每一行開頭的行號與空白 , 這些是為了書中解說程式時的方便 , 並不是程式的一部份。

並請儲存為 FirstJava.java 這樣的檔名。

Page 37: SCJP ch02

37

2-2-2 編譯寫好的程式

撰寫好並儲存 FirstJava.java 這個程式檔後 , 就可以利用 Java 編譯器來進行編譯。

Java 編譯器的檔名為 javac (javac.exe), 而執行程式的工具則為 java (java.exe) 。

在使用前 , 請先確定您已依照上一節的說明建置好 Java 工作環境。

Page 38: SCJP ch02

38

編譯寫好的程式

請執行 『開始 / 所有程式 / 附屬應用程式 / 命令提示字元』 命令 , 開啟命令提示字元 視窗 , 先利用 『 cd』 指令切換到您儲存程式檔案的資料夾 , 例如若 FirstJava.java 是儲存在 C 磁碟的 test 資料夾下 , 就必須先執行以下的指令 , 切換到該資料夾:

Page 39: SCJP ch02

39

編譯寫好的程式

然後鍵入以下指令進行編譯:

如果編譯之後發現有錯誤 , 請回過頭去檢查您所鍵入的程式 , 看看是不是有甚麼地方打錯了?

如果還是有問題 , 請參考 『 2-2-4 撰寫 Java 程式的注意事項』 一節 , 仔細檢查您的程式。

Page 40: SCJP ch02

40

2-2-3 執行程式

一旦編譯完成 , 沒有任何錯誤 , 您就可以執行剛剛所撰寫的程式了。請在您所開啟的命令提示字元視窗中 ,

鍵入以下指令執行剛剛編譯好的程式:

▪ 編譯的結果會儲存到副檔名為 .class 的檔案 , 例如在本例中為 FirstJava.class 。由於在執行時會自動加上 .class, 因此上面的命令不可寫成 java FirstClass.

class 。

Page 41: SCJP ch02

41

執行程式

以下就是由編譯到執行的實際結果:

Page 42: SCJP ch02

42

2-2-4 撰寫 Java 程式的注意事項

如果編譯或是執行的過程中有問題 , 請依照以下所提的注意事項 , 仔細檢查您的程式。

Page 43: SCJP ch02

43

檔案名稱

檔案名稱必須和第 1 行 public class 之後的 First

Java 相符 , 並且加上 .java 作為副檔名 , 以標示這是一個 Java 程式。

因此 , 儲存的檔案必須取名為 FirstJava.java, 如果取錯名字 , 編譯的時候就會出現錯誤訊息。

例如 , 剛剛的程式如果儲存在 First.java 中 , 則編譯的結果如下。

Page 44: SCJP ch02

44

檔案名稱

錯誤訊息告訴您必須將程式儲存在一個名為 FirstJav

a.java 的檔案裡。

Page 45: SCJP ch02

45

英文字大小寫不同

Java 編譯器會視英文字母的大小寫為不同的字母。 舉例來說 , 第 3 行一開頭的 System 就不能寫為

system, 也不能寫為 SYSTEM, 否則編譯的時候都一樣會有錯誤訊息。

Page 46: SCJP ch02

46

全形與半形不同

如果您很習慣使用中文全形的標點符號或是括號 , 那麼就必須特別注意 , 在程式中必須使用半形的標點符號以及括號。

舉例來說 ,半形的『 ;』不能寫成全形的『;』。

Page 47: SCJP ch02

47

執行時不需指定副檔名

執行編譯好的程式時 , 只需要指定主檔名 , 也就是檔案名稱中 .class 之前的部分 ( 因為 java 會自動加上 .class 副檔名 ) 。

如果您連帶列出副檔名的話 , 就會出現執行錯誤的狀況 , 像是這樣:

Page 48: SCJP ch02

48

執行時不需指定副檔名

另外 , 執行時所指定的主檔名部分大小寫必須相符。 以本例來說 , 主檔名必須和第 1 行 public class

之後的名稱一樣 , 也就是 FirstJava, 如果您的大小寫不對 , 執行就會發生錯誤 , 例如。

Page 49: SCJP ch02

49

執行時不需指定副檔名

Page 50: SCJP ch02

50

無法執行 javac.exe 或是 java.exe

這很可能是忘記設定環境變數 path 的值 , 請參考上一節進行設定。

Page 51: SCJP ch02

51

2-3 Java 程式的組成要素

在上一節中 , 已經帶領大家實際撰寫了第一個 Java

程式 , 接下來就要針對這個簡單的程式 , 一一解析構成 Java 程式的基本要素。

Page 52: SCJP ch02

52

2-3-1 區塊 (Block)

讓我們再來看看剛剛所撰寫的 FirstJava 程式:

Page 53: SCJP ch02

53

區塊 (Block)

簡簡單單的 5 行 , 就構成了 Java 程式最基本的架構 , 其中 , 您可以注意到幾件事情:▪ 程式中以一對大括號 { 與 } 括起來的部分稱為區塊

(Block), 區塊中可以包含其他的區塊 , 像是第 1 ~ 5

行的區塊就包含了第 2 ~ 4 行的區塊。在左大括號 ( 即 {) 左邊的文字代表的是該區塊的種類與名稱 , 不同的區塊構成 Java 程式中的各種元素 , 後續的章節會說明每一種區塊的意義。

Page 54: SCJP ch02

54

區塊 (Block)

▪ 為了突顯出區塊 , 並且方便辨識區塊的包含關係 , 在撰寫程式時會把區塊的內容往右邊縮排 (Indent) 。舉例來說 , 第 2 ~ 4 行的區塊因為是內含在第 1 ~ 5

行的區塊內 , 所以將整個區塊往右縮 , 這樣在視覺上就可以清楚的區分出區塊間的關係。不過 , 這純粹是為了撰寫或閱讀程式時辨識上的方便 ,

而非必要的作法 , 您也可以把相同的程式寫成這樣。

Page 55: SCJP ch02

55

區塊 (Block)

▪ 一樣可以正常編譯執行 , 但可讀性很差。

▪ 至於縮排時要往右移多少空格 , 則是憑個人喜好而定 ,

我們建議以 2 ~ 4 個空格最恰當。在本書中 , 所有的程式都是以 2 個空格為縮排的間隔。

Page 56: SCJP ch02

56

2-3-2 Java 程式的起點 - -main

在範例程式的區塊中 , 有一個區塊是每一個 Java

程式都必須要有的 , 就是第 2 ~ 4 行的區塊 , 這個區塊稱為 main() 方法 , 意思是說 , 這個區塊構成了一個方法 (Method), 而 main 是這個方法的名字。

至於方法的意義 , 會在第 8 章說明 , 這裡只要先記住每一個 Java 程式都必須要有一個 main() 方法即可。

Page 57: SCJP ch02

57

main() 方法的名稱

再次提醒 , 由於 Java 是英文字母大小寫不同 , 因此要特別注意 main 是全部小寫。

除此之外 , 第一行 public class 之後的名稱也會依據程式的目的不同而命名 , 以適度說明程式的內容。

Page 58: SCJP ch02

58

Java 程式的起點 - -main

main() 方法是 Java 程式真正執行時的起點 , 當 J

ava 程式執行時 , 會從這個區塊內的程式開始 , 循序執行 , 一直到這個區塊結束為止。

以 FirstJava.java 來說 , main() 方法中只有一行程式 , 這行程式的作用就是在螢幕上輸出訊息。

其中 , 以一對雙引號 ("") 所括起來的內容就是要輸出的訊息 , 在本例中 , 就是輸出『這是我的第一個 Java 程式。』只要變化用雙引號括起來的內容 , 就可以輸出不同的訊息。

Page 59: SCJP ch02

59

Java 程式的起點 - -main

因此 , 只要更改 main() 方法的內容 , 程式的執行結果就會不同。舉例來說 , 我們可以修改 FirstJava.ja

va 程式 , 讓 main() 方法的內容更加豐富 , 例如:

Page 60: SCJP ch02

60

Java 程式的起點 - -main

在 SecondJava.java 這個程式中 , main() 方法內有 2 行程式 , 分別輸出兩段訊息。因此 , 編譯、執行程式就會看到這 2 行訊息了。

從這一章開始 , 範例程式都會依循和 FirstJava.java

相似的架構 , 僅有內部的區塊 , 也就是 main() 方法有所差別 , 來執行不同的動作。

Page 61: SCJP ch02

61

Java 程式的起點 - -main

除此之外 , 第一行 public class 之後的名稱也會依據程式的目的不同而命名 , 以適度說明程式的內容。

Page 62: SCJP ch02

62

2-3-3 敘述 (Statement )

如果細部來看單一個區塊 , 那麼每個區塊又是由一或多個敘述 (Statement ) 所構成。

簡單的敘述是以分號 (;) 結尾 , 其他的敘述則是以一個區塊作為結尾。

以 SecondJava.java 為例 , 在 main() 方法這個區塊中就有兩個敘述 , 分別是:

Java 程式基本上就是由敘述組合而成 , 而程式在執行時就是以敘述為單元 , 由上往下循序進行。

Page 63: SCJP ch02

63

敘述結尾分號

簡單的敘述都是以分號為分隔 , 同一個敘述可以分成多行撰寫 , 和寫在同一行是一樣的效果;多個簡單敘述也可以寫在同一行 , 結果和每一個敘述單獨撰寫成一行相同。

舉例來說 , 以下這個程式就和 SecondJava.java 意義完全相同 , 只是斷行的方式不同而已。

Page 64: SCJP ch02

64

敘述結尾分號

其中 3 、 4 兩行就是原本的第 3 行;而 5 、 6

兩行則是原本的第 4 行。

Page 65: SCJP ch02

65

字符 (Token) 與空白符號 (Whitespace)

如果再把敘述剖開 , 那麼敘述可以再細分為由一或多個字符 (Token) 所組成。

例如 SecondJava.java 的第 3 行『 System.out.pr

intln (" 這是我所寫的第二個 Java 程式, ");』就是由『 System』、『 .』、『 out』、『 .』、『 pri

ntln』、『 (』、『 " 這是我所寫的第二個 Java

程式, "』、『 )』、『 ;』這些字符所組成。 字符與字符之間可以加上適當數量的空白符號 (Whit

espace), 以方便識別。

Page 66: SCJP ch02

66

字符 (Token) 與空白符號 (Whitespace)

舉例來說 , 以下的程式雖然在 "println" 與 "(" 間加上了額外的空白 , 但和 SecondJava.java 的意義是相同的:

Page 67: SCJP ch02

67

字符 (Token) 與空白符號 (Whitespace)

但是如果字符間不相隔開會造成混淆的話 , 就一定得加上空白符號。

舉例來說 , 第 2 行的 public 、 static 、 void 與 main 這 4 個字符中間若不以分隔字元隔開 , 就變成 publicstaticvoidmain, Java 編譯器就會以為這是單一個字符了。

Page 68: SCJP ch02

68

字符 (Token) 與空白符號 (Whitespace)

在 Java 中 , 空白字元、換行字元 ( 也就是按 [En

ter]) 以及定位字元 ( 也就是按 [Tab]) 都可以作為空白符號 , 您可以依據實際的需求採用不同的方式。

之前曾經提過 , 同一個敘述可以分成多行撰寫 , 其實就是利用換行字元當作空白符號。

換句話說 , 同一敘述分成多行撰寫時並不能隨便斷行 ,

而必須以字符為界線 , 像是以下這個程式編譯時就會有錯誤 , 因為它把 println 這個字符斷開成兩行了。

Page 69: SCJP ch02

69

字符 (Token) 與空白符號 (Whitespace)

Page 70: SCJP ch02

70

分隔符號 (Separator)

要特別注意的是 ,

"(" 、 ")" 、 "{" 、 "}" 、 "[" 、 "]" 、 ";" 、 "," 、 "." 這些字符在 Java 中稱為分隔符號 (Separator 或 punct

uator) 。 它們除了可以將其之前與之後的字符隔開以外 , 通常也代表了其後的字符 ( 如果是成對的分隔符號 , 像是 "{"

與 "}", 則是指由這對分隔符號所包含的內容 ) 是其前面字符的附屬部分。

舉例來說 , 在 SecondJava.java 中 , main() 方法後面由 "{" 、 "}" 括起來的區塊就是 main() 方法的主體。

Page 71: SCJP ch02

71

分隔符號 (Separator)

除了 ";" 在前面已經說明過 , 是用來分隔敘述以外 ,

其餘的分隔符號會在後面章節中適當的地方說明。

Page 72: SCJP ch02

72

2-3-4 為程式加上註解 (Comment )

除了撰寫實際上會有所動作的敘述以外 , 您也可以在程式中加上僅有說明用途的註解 (Comment ) 。

舉例來說 , 以下的程式就加上了許多註解 , 讓您可以更輕易的看懂程式的內容。

Page 73: SCJP ch02

73

為程式加上註解 (Comment )

Page 74: SCJP ch02

74

為程式加上註解 (Comment )

其中 , // 字符開始往後一直到該行文字結束之前的內容都是註解 , 當 Java 解譯器看到 "//" 字符後 , 就會忽略其後的文字 , 一直到下一行開始 , 才會繼續轉譯程式的內容 , 這種註解稱為單行註解 (End-Of-Li

ne Comment) 。 另外還有一種可以跨越多行的註解方式 , 稱為傳統式註解 (Traditional Comment) 或是區塊式註解 (Bl

ock Comment), 以成對的 /* 與 */ 來包含所要加入的註解說明。

Page 75: SCJP ch02

75

為程式加上註解 (Comment )

例如:

Page 76: SCJP ch02

76

為程式加上註解 (Comment )

其中第 1 ~ 4 行就是一個跨越 4 行的區塊式註解 , 而第 7 行則是一個僅在單一行內的區塊式註解。

區塊式註解原則上可出現在程式中的任何位置 , 但不能出現在字符內 , 例如以下程式在編譯時會有錯誤:

因為在第 2 行中有一個區塊式註解出現在字符中 , 這是錯誤的寫法。

Page 77: SCJP ch02

77

為程式加上註解 (Comment )

註解是一項非必要、但強烈建議使用的工具。 尤其當程式很長或是邏輯比較複雜的時候 , 加上適當的註解不但可以讓自己在一段時間過後能夠知道撰寫程式時的想法 , 如果程式往後要交給別的人修改 , 那麼註解也是後繼者理解程式的最佳幫助。

Page 78: SCJP ch02

78

為程式加上註解 (Comment )

總結來說 , Java 程式是由字符組成敘述 , 再由敘述組成區塊 , 然後再由區塊組成整個程式。

到了這裡 , 我們已經把 Java 程式最基本的架構以及各個組成元素簡單說明完畢 , 從下一章開始 , 就要學習與動手撰寫更複雜、功能更多的 Java 程式了。

Page 79: SCJP ch02

79

1. Place codes into the following class so that it comp

iles correctly .

Codes:

Page 80: SCJP ch02

80

2. Which are true for Java language? (Choose all that apply . )A. A block is begin with [ and end with ].

B. A Block Comment is begin with /* and end with */.

C. A Whitespace could be a space, tab, or new-line character.

D. A statement is end with colon (:).

E. Every executable program must have a Main() method.

Page 81: SCJP ch02

81

3. Given the following java code:

Which is the result?

A. Compiles error at line 1 because missing class name (Hi).

B. Compiles error at line 2 because too much statement in one line.

C. Compiles error at line 2 because a statement can't be break into two lines.

D. Compiles error at line 3 because }} should be modified to } }.

E. Compiles successfully.