More Related Content Similar to SCJP ch02 (20) SCJP ch021. 第 2 章
初探 Java
本投影片(下稱教用資源)僅授權給採用教用資源相關之旗標書籍為教科書之授課老師(下稱老師)專用,老
師為教學使用之目的,得摘錄、編輯、重製教用資源(但使用量不得超過各該教用資源內容之 80% )以製作為
輔助教學之教學投影片,並於授課時搭配旗標書籍公開播放,但不得為網際網路公開傳輸之遠距教學、網路教
學等之使用;除此之外,老師不得再授權予任何第三人使用,並不得將依此授權所製作之教學投影片之相關著
作物移作他用。
著作權所有 © 旗標出版股份有限公司
3. 前言
在上一章中 , 已經簡單的介紹了有關程式語言最基本
的概念 , 以及程式語言的分類 , 並且對於 Java 程式
語言的演進也有了初步的瞭解。
接下來這一章 , 就要開始實際動手撰寫 Java 程式 ,
並且對於構成 Java 程式的基本要素 , 一一提出詳盡
的解說。
4. 2-1 建置 Java 的程式開發環境
雖然市面上、網路上可找到不少具有整合開發環境
(IDE) 的 Java 語言開發工具 , 像是昇陽 (Sun) 公
司的 NetBeans IDE 、開放原始碼 (Open Source)
的 Eclipse 、以及 CodeGear 公司的 JBuilder 等
。
不過初學者最好能親自用昇陽公司的 Java 開發套件
(JDK, Java SE Developement Kit) 來編譯及執行
Java 程式 , 以便對 Java 有更深入的認識;等到將
來比較熟練之後 , 再使用 IDE 來加快程式開發的速
度。
5. 2-1-1 下載 JDK 及文件
若想取得最新 JDK 版本 , 可直接至昇陽公司的官方
網站下載 , 請開啟瀏覽器 , 連上
"http://java.sun.com/javase/downloads/index.jsp " :
9. 下載 JDK 及文件
在下載 JDK 的同時 , 我們也可另行下載 JDK 的說
明文件 , 請再次連
上 "http://java.sun.com/javase/downloads/index.jsp
", 向下捲動找到 "Java SE 6 Documentation" 項目
:
12. 2-1-2 安裝 JDK 工具及文件
要安裝 JDK 很簡單 , 直接執行其安裝程式即可;至
於文件則只要自行解壓縮到指定的目錄即可完成安裝
。
18. 安裝 JDK 開發工具
至此即安裝完成 , 稍後我們會介紹如何設定 Java 的
工作環境 , 以方便使用 JDK 中的工具程式。
19. 安裝 JDK 說 明文件
昇陽公司提供的 JDK 說明文件為 HTML 網頁格式 ,
而且是以壓縮檔的形式包裝 , 並未提供安裝程式 , 我
們只需將它解壓縮至想安裝的路徑即可:
21. 安裝 JDK 說 明文件
解壓縮完畢後 , 切換到文件解壓縮的目錄 , 如下操作
:
24. 2-1-3 設定開發環境
雖然 JDK 安裝好後即可使用 , 但由於安裝程式未替
我們設定 Windows 環境變數 , 用起來並不方便 , 因
此要一勞永逸 , 就是在安裝後即設好相關環境變數。
請按開始鈕 , 並依如下步驟進行設定:
31. 設定開發環境
如果出現『 'javac' 不是內部或外部命令、可執行的
程式或批次檔。』這樣的訊息 , 表示您的 Path 環境
變數設定有誤 , 因此作業系統找不到 javac 執行檔
所在的位置。
請再次確認您的 JDK 安裝路徑 , 並依前述的步驟重
新設定環境變數。
32. 2-2 撰寫第一個 Java 程式
要使用 Java 程式語言 , 您必須先將依照 Java 語
法撰寫的程式儲存在一個純文字檔 案中 ( 副檔名一般
都是用 .java), 然後再利用 Java 程式語言的編譯器
轉譯程式 , 將您所撰寫的 Java 程式轉譯成 Java
虛擬機器的機器碼 , 也稱為 Byte Code 。
然後再使用 Java 虛擬機器來執行轉譯出來的機器碼
。
如果執行結果有問題 , 就必須回頭修改程式 , 再重複
前面所描述的步驟。
34. 2-2-1 使用文字編輯器撰寫程式
要撰寫 Java 程式 , 必須使用文字編輯器 (Text
Editor), 像是 Windows 所內附的記事本 , 或者是坊
間一般流行的 UltraEdit 這類付費軟體來撰寫 , 而不
是使用 Word 這一類的文書處理軟體。
您也可以在網路上找到許多功能不錯、免費的文字編
輯器 , 像是 Crimson Editor 、 VIM 等等。
35. 為什麼不能使用文書處理軟體撰寫
Java 程式
像是 Word 之類的文書處理軟體 , 由於必須記錄段
落文字的樣式 ( 大小、顏色、字體 ) , 因此除了您鍵
入的文字以外 , 儲存檔案時還會儲存許多相關文字樣
式的資訊 , 而且預設會以其自訂的格式儲存文字與相
關資訊。
Java 編譯器既不認得這些文書處理軟體的檔案格式 ,
也無法認得其中所儲存的相關資訊 , 因此無法正確編
譯程式 , 所以請不要使用文書處理軟體來撰寫程式。
36. 使用文字編輯器撰寫程式
現在 , 就請您使用文字編輯器 , 撰寫如下的程式:
▪ 請特別注意 , 鍵入程式的時候並不包含每一行開頭的
行號與空白 , 這些是為了書中解說程式時的方便 , 並
不是程式的一部份。
並請儲存為 FirstJava.java 這樣的檔名。
37. 2-2-2 編譯寫好的程式
撰寫好並儲存 FirstJava.java 這個程式檔後 , 就可以
利用 Java 編譯器來進行編譯。
Java 編譯器的檔名為 javac (javac.exe), 而執行程
式的工具則為 java (java.exe) 。
在使用前 , 請先確定您已依照上一節的說明建置好
Java 工作環境。
38. 編譯寫好的程式
請執行 『開始 / 所有程式 / 附屬應用程式 / 命令提
示字元』 命令 , 開啟命令提示字元 視窗 , 先利用
『 cd 』 指令切換到您儲存程式檔案的資料夾 , 例如
若 FirstJava.java 是儲存在 C 磁碟的 test 資料夾
下 , 就必須先執行以下的指令 , 切換到該資料夾:
40. 2-2-3 執行程式
一旦編譯完成 , 沒有任何錯誤 , 您就可以執行剛剛所
撰寫的程式了。請在您所開啟的命令提示字元視窗中
, 鍵入以下指令執行剛剛編譯好的程式:
▪ 編譯的結果會儲存到副檔名為 .class 的檔案 , 例如在
本例中為 FirstJava.class 。由於在執行時會自動加上
.class, 因此上面的命令不可寫成 java
FirstClass.class 。
42. 2-2-4 撰寫 Java 程式的注意事項
如果編譯或是執行的過程中有問題 , 請依照以下所提
的注意事項 , 仔細檢查您的程式。
43. 檔 案名稱
檔案名稱必須和第 1 行 public class 之後的
FirstJava 相符 , 並且加上 .java 作為副檔名 , 以標
示這是一個 Java 程式。
因此 , 儲存的檔案必須取名為 FirstJava.java, 如果
取錯名字 , 編譯的時候就會出現錯誤訊息。
例如 , 剛剛的程式如果儲存在 First.java 中 , 則編譯
的結果如下。
47. 執行時不需指定副檔 名
執行編譯好的程式時 , 只需要指定主檔名 , 也就是檔
案名稱中 .class 之前的部分 ( 因為 java 會自動加
上 .class 副檔名 ) 。
如果您連帶列出副檔名的話 , 就會出現執行錯誤的狀
況 , 像是這樣:
48. 執行時不需指定副檔 名
另外 , 執行時所指定的主檔名部分大小寫必須相符。
以本例來說 , 主檔名必須和第 1 行 public class 之
後的名稱一樣 , 也就是 FirstJava, 如果您的大小寫
不對 , 執行就會發生錯誤 , 例如。
51. 2-3 Java 程式的組成要素
在上一節中 , 已經帶領大家實際撰寫了第一個 Java
程式 , 接下來就要針對這個簡單的程式 , 一一解析構
成 Java 程式的基本要素。
53. 區塊 (Block)
簡簡單單的 5 行 , 就構成了 Java 程式最基本的架
構 , 其中 , 您可以注意到幾件事情:
▪ 程式中以一對大括號 { 與 } 括起來的部分稱為區塊
(Block), 區塊中可以包含其他的區塊 , 像是第 1 ~ 5
行的區塊就包含了第 2 ~ 4 行的區塊。在左大括號
( 即 {) 左邊的文字代表的是該區塊的種類與名稱 , 不
同的區塊構成 Java 程式中的各種元素 , 後續的章節
會說明每一種區塊的意義。
54. 區塊 (Block)
▪ 為了突顯出區塊 , 並且方便辨識區塊的包含關係 , 在
撰寫程式時會把區塊的內容往右邊縮排 (Indent) 。
舉例來說 , 第 2 ~ 4 行的區塊因為是內含在第 1 ~ 5
行的區塊內 , 所以將整個區塊往右縮 , 這樣在視覺上
就可以清楚的區分出區塊間的關係。
不過 , 這純粹是為了撰寫或閱讀程式時辨識上的方便 ,
而非必要的作法 , 您也可以把相同的程式寫成這樣。
55. 區塊 (Block)
▪ 一樣可以正常編譯執行 , 但可讀性很差。
▪ 至於縮排時要往右移多少空格 , 則是憑個人喜好而定 ,
我們建議以 2 ~ 4 個空格最恰當。在本書中 , 所有的
程式都是以 2 個空格為縮排的間隔。
56. 2-3-2 Java 程式的起點 - -main
在範例程式的區塊中 , 有一個區塊是每一個 Java 程
式都必須要有的 , 就是第 2 ~ 4 行的區塊 , 這個區
塊稱為 main() 方法 , 意思是說 , 這個區塊構成了一
個方法 (Method), 而 main 是這個方法的名字。
至於方法的意義 , 會在第 8 章說明 , 這裡只要先記
住每一個 Java 程式都必須要有一個 main() 方法即
可。
57. main() 方法的名稱
再次提醒 , 由於 Java 是英文字母大小寫不同 , 因此
要特別注意 main 是全部小寫。
除此之外 , 第一行 public class 之後的名稱也會依據
程式的目的不同而命名 , 以適度說明程式的內容。
58. Java 程式的起點 - -main
main() 方法是 Java 程式真正執行時的起點 , 當
Java 程式執行時 , 會從這個區塊內的程式開始 , 循
序執行 , 一直到這個區塊結束為止。
以 FirstJava.java 來說 , main() 方法中只有一行程式
, 這行程式的作用就是在螢幕上輸出訊息。
其中 , 以一對雙引號 ("") 所括起來的內容就是要輸
出的訊息 , 在本例中 , 就是輸出『這是我的第一個
Java 程式。』只要變化用雙引號括起來的內容 , 就
可以輸出不同的訊息。
59. Java 程式的起點 - -main
因此 , 只要更改 main() 方法的內容 , 程式的執行結
果就會不同。舉例來說 , 我們可以修改
FirstJava.java 程式 , 讓 main() 方法的內容更加豐
富 , 例如:
60. Java 程式的起點 - -main
在 SecondJava.java 這個程式中 , main() 方法內有
2 行程式 , 分別輸出兩段訊息。因此 , 編譯、執行程
式就會看到這 2 行訊息了。
從這一章開始 , 範例程式都會依循和 FirstJava.java
相似的架構 , 僅有內部的區塊 , 也就是 main() 方法
有所差別 , 來執行不同的動作。
61. Java 程式的起點 - -main
除此之外 , 第一行 public class 之後的名稱也會依據
程式的目的不同而命名 , 以適度說明程式的內容。
62. 2-3-3 敘述 (Statement )
如果細部來看單一個區塊 , 那麼每個區塊又是由一或
多個敘述 (Statement ) 所構成。
簡單的敘述是以分號 (;) 結尾 , 其他的敘述則是以一
個區塊作為結尾。
以 SecondJava.java 為例 , 在 main() 方法這個區
塊中就有兩個敘述 , 分別是:
Java 程式基本上就是由敘述組合而成 , 而程式在執
行時就是以敘述為單元 , 由上往下循序進行。
63. 敘述結尾分號
簡單的敘述都是以分號為分隔 , 同一個敘述可以分成
多行撰寫 , 和寫在同一行是一樣的效果;多個簡單敘
述也可以寫在同一行 , 結果和每一個敘述單獨撰寫成
一行相同。
舉例來說 , 以下這個程式就和 SecondJava.java 意
義完全相同 , 只是斷行的方式不同而已。
65. 字符 (Token) 與空白符號 (Whitespace)
如果再把敘述剖開 , 那麼敘述可以再細分為由一或多
個字符 (Token) 所組成。
例如 SecondJava.java 的第 3 行
『 System.out.println (" 這是我所寫的第二個 Java
程式, "); 』就是由『 System 』、『 . 』、
『 out 』、『 . 』、『 println 』、『 ( 』、『 " 這
是我所寫的第二個 Java 程式, " 』、『 ) 』、
『 ; 』這些字符所組成。
字符與字符之間可以加上適當數量的空白符號
(Whitespace), 以方便識別。
66. 字符 (Token) 與空白符號 (Whitespace)
舉例來說 , 以下的程式雖然在 "println" 與 "(" 間加
上了額外的空白 , 但和 SecondJava.java 的意義是
相同的:
67. 字符 (Token) 與空白符號 (Whitespace)
但是如果字符間不相隔開會造成混淆的話 , 就一定得
加上空白符號。
舉例來說 , 第 2 行的 public 、 static 、 void 與
main 這 4 個字符中間若不以分隔字元隔開 , 就變
成 publicstaticvoidmain, Java 編譯器就會以為這是
單一個字符了。
68. 字符 (Token) 與空白符號 (Whitespace)
在 Java 中 , 空白字元、換行字元 ( 也就是按
[Enter]) 以及定位字元 ( 也就是按 [Tab]) 都可以作
為空白符號 , 您可以依據實際的需求採用不同的方式
。
之前曾經提過 , 同一個敘述可以分成多行撰寫 , 其實
就是利用換行字元當作空白符號。
換句話說 , 同一敘述分成多行撰寫時並不能隨便斷行
, 而必須以字符為界線 , 像是以下這個程式編譯時就
會有錯誤 , 因為它把 println 這個字符斷開成兩行了
。
70. 分隔符號 (Separator)
要特別注意的是 ,
"(" 、 ")" 、 "{" 、 "}" 、 "[" 、 "]" 、 ";" 、 "," 、 "." 這
些字符在 Java 中稱為分隔符號 (Separator 或
punctuator) 。
它們除了可以將其之前與之後的字符隔開以外 , 通常
也代表了其後的字符 ( 如果是成對的分隔符號 , 像是
"{" 與 "}", 則是指由這對分隔符號所包含的內容 ) 是
其前面字符的附屬部分。
舉例來說 , 在 SecondJava.java 中 , main() 方法後
面由 "{" 、 "}" 括起來的區塊就是 main() 方法的主
72. 2-3-4 為程式加上註解 (Comment )
除了撰寫實際上會有所動作的敘述以外 , 您也可以在
程式中加上僅有說明用途的註解 (Comment ) 。
舉例來說 , 以下的程式就加上了許多註解 , 讓您可以
更輕易的看懂程式的內容。
74. 為程式加上註解 (Comment )
其中 , // 字符開始往後一直到該行文字結束之前的內
容都是註解 , 當 Java 解譯器看到 "//" 字符後 , 就會
忽略其後的文字 , 一直到下一行開始 , 才會繼續轉譯
程式的內容 , 這種註解稱為單行註解 (End-Of-Line
Comment) 。
另外還有一種可以跨越多行的註解方式 , 稱為傳統式
註解 (Traditional Comment) 或是區塊式註解
(Block Comment), 以成對的 /* 與 */ 來包含所要
加入的註解說明。
76. 為程式加上註解 (Comment )
其中第 1 ~ 4 行就是一個跨越 4 行的區塊式註解 ,
而第 7 行則是一個僅在單一行內的區塊式註解。
區塊式註解原則上可出現在程式中的任何位置 , 但不
能出現在字符內 , 例如以下程式在編譯時會有錯誤:
因為在第 2 行中有一個區塊式註解出現在字符中 ,
這是錯誤的寫法。
77. 為程式加上註解 (Comment )
註解是一項非必要、但強烈建議使用的工具。
尤其當程式很長或是邏輯比較複雜的時候 , 加上適當
的註解不但可以讓自己在一段時間過後能夠知道撰寫
程式時的想法 , 如果程式往後要交給別的人修改 , 那
麼註解也是後繼者理解程式的最佳幫助。
78. 為程式加上註解 (Comment )
總結來說 , Java 程式是由字符組成敘述 , 再由敘述
組成區塊 , 然後再由區塊組成整個程式。
到了這裡 , 我們已經把 Java 程式最基本的架構以及
各個組成元素簡單說明完畢 , 從下一章開始 , 就要學
習與動手撰寫更複雜、功能更多的 Java 程式了。
79. 1. Place codes into the following class so that it
compiles correctly .
Codes:
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.
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.