Skip to content

Commit b00da8d

Browse files
author
Justin Lin
committed
added 3.1
1 parent 4cede36 commit b00da8d

File tree

1 file changed

+195
-0
lines changed

1 file changed

+195
-0
lines changed

docs/CH03.md

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
第 3 章 語法入門
2+
================
3+
4+
程式語言(Programming Language)本質上就是一個語言,語言的目的在於讓您與特定對象進行溝通,只不過程式語言的溝通對象是電腦。現在您學習的是 Java 語言,用 Java 寫程式的目的就是在告訴電腦,您希望它為您作哪些事,Java 既然是語言,就有其規定的語法,這個章節就是在學習基本的 Java 語法。
5+
6+
我建議初學者從文字模式學習如何操作程式,您在這個章節中將會學到:如何告訴電腦在命令模式下顯示訊息?什麼時候該等待您輸入資料(即 Console 互動)?程式中您要使用的資料有哪些(即資料型態)?您要用這些資料進行什麼樣的運算(即各種運算子的使用)?在某些情況滿足時下一步要作什麼?不滿足某些條件時又該作些什麼(即流程控制)?
7+
8+
-----------
9+
10+
3.1 第一個 Java 程式
11+
--------------------
12+
13+
先來解釋一下第 2 章中您所完成的「第一個 Java 程式」,如果您學過 C 語言,對於 3.1.2「給 C 使用者的第一個 Java 程式」可能會覺得比較親切,因為介紹了類似 C 語言中 printf() 函式的功能,另外別忘了在寫程式時加入一些註解文字,這在閱讀程式碼的時候會很有幫助。
14+
15+
## 3.1.1 解釋第一個 Java 程式 #
16+
17+
要對新手解釋第一個 Java 程式事實上並不簡單,因為一個最簡單的 Java 程式就會涉及檔案管理、類別 (Class)、主程式、命令列引數(Command line argument)等觀念,我很想對您說,反正一個基本的 Java 程式就這麼寫就對了,因為要一下子接受這麼多觀念並不容易。總之,如果現階段您無法瞭解,就請當它是 Java 語言的文法規範。
18+
19+
先重新列出您的第一個 Java 程式以方便說明。
20+
21+
#### **範例 3.1 HelloJava.java**
22+
```java
23+
public class HelloJava {
24+
public static void main(String[] args) {
25+
System.out.println("嗨!我的第一個Java程式!");
26+
}
27+
}
28+
```
29+
30+
- 定義類別(Class)
31+
32+
撰寫 Java 程式通常都是由定義「類別」開始,"class" 是 Java 用來定義類別的關鍵字,範例中類別的名稱是 HelloJava,這與您編輯的檔案(HelloJava.java)主檔名必須相同,HelloJava 類別使用關鍵字 "public" 宣告,在編寫 Java 程式時,一個檔案中可撰寫數個類別,但是只能有一個公開(public)類別,而且檔案主檔名必須與這個公開類別的名稱相同,在定義類別名稱時,建議將類別首字母大寫,並在類別名稱上表明類別的作用。
33+
34+
- 定義區塊(Block)
35+
36+
在 Java 程式使用大括號 '{' 與 '}'來定義區塊,大括號兩兩成對,目的在區別定義的作用範圍,例如您的程式中,HelloJava 類別的區塊包括了 main(),而 main() 的區塊包括了一句顯示訊息的程式碼。
37+
38+
- 定義 main() 方法(Method)
39+
40+
main() 是 Java 程式的「進入點」(Entry point),程式的執行是由進入點開始的,類別中的方法是類別的成員(Member),main() 方法一定是個 "public" 成員(member),這樣它才可以執行環境被呼叫;main() 方法不需要產生物件(Object)就能被執行,所以它必須是個 "static" 成員,"public" 與 "static" 的觀念都是 Java 物件導向(Object-oriented)程式上的觀念,之後專門討論類別與物件時會再介紹,這邊先不用理解 "public" 與 "static" 的真正意涵。
41+
42+
main() 之前的「void」表示 main() 執行結束後不傳回任何值,Java 程式的 main() 方法不需傳回任何值,所以一律宣告 void;main() 括號間的 String[] args 可以在執行程式時取得使用者指定的命令列引數(Command line argument),目前雖然您用不到,但仍要撰寫它,這是規定。
43+
44+
- 撰寫陳述(Statement)
45+
46+
來看 main() 當中的一行陳述:
47+
48+
<pre>System.out.println("嗨!我的第一個Java程式!");</pre>
49+
50+
陳述是程式語言中的一行指令,簡單的話就是程式語言的「一句話」。注意每一句陳述的結束要用分號 ' ; ' ,在上面的陳述中,您使用了 java.lang 套件(package)下的 System 類別的公開(public)成員 out 物件,out 是一個 PrintStream 物件,您使用了 PrintStream 所提供的 println() 方法,將當中指定的字串(String) "嗨!我的第一個Java程式!" 輸出至文字模式上。
51+
52+
注意在 Java 中字串要使用 "" 包括,println() 表示輸出字串後自動換行,如果使用 print() 的話,則輸出字串後程式並不會自動斷行。
53+
54+
一個最基本的 Java 程式完成了,接下來要編譯程式了,關於編譯在第 2 章中有介紹過,這邊再作個提示,編譯時是使用 javac 公用程式,如下所示:
55+
56+
javac HelloJava.java
57+
58+
編譯完成後,預設在同一個目錄下會產生一個 HelloJava.class 的位元碼(bytecodes)檔案,在執行時期可以由執行環境轉換為平台可執行的機器碼,執行程式時是使用 java 工具程式,如下所示:
59+
60+
java HelloJava
61+
62+
注意最後並沒有加上 *.class 的副檔名,您只要提供類別名稱就可以了,程式畫面會顯示如下:
63+
64+
嗨!我的第一個Java程式!
65+
66+
> **良葛格的話匣子** 定義區塊的風格因人而異,有的設計人員習慣先換行再定義區塊,例如:
67+
> <pre>
68+
> public class HelloJava
69+
> {
70+
> public static void main(String[] args)
71+
> {
72+
> System.out.println("嗨!我的第一個Java程式!");
73+
> }
74+
> }</pre>
75+
> 這麼作的好處是可以很快的找到兩兩成對的大話號,區塊對應清楚。找一個您喜歡的風格撰寫,以清晰易讀為原則就可以了。
76+
77+
3.1.2 給 C 使用者的第一個 Java 程式
78+
-----------------------------------
79+
80+
學過 C 語言的設計人員總是對 printf() 方法的功能總是難以忘懷,他們在學 Java 語言時常不免感概:「是的!是 printf(),他們忘了把 printf() 放進去了....」。
81+
82+
在某些時候,printf() 方法中字串上可以指定引數來進行輸出的功能確實令人難以割捨,幸好,Java 在 J2SE 5.0 這個版本中,總算給了 C 使用者類似 printf() 的功能了,如果您是學過 C 的使用者,下面這第一個 Java 程式或許會讓您高興一些:
83+
84+
#### **範例 3.2 HelloJavaForC.java**
85+
```java
86+
public class HelloJavaForC {
87+
public static void main(String[] args) {
88+
System.out.printf("%s! 這是您的第一個Java程式!\n",
89+
"C語言Fan");
90+
}
91+
}
92+
```
93+
94+
這次使用的是 out 物件的 printf() 方法,'%s' 對應於第一個字串 "C語言Fan",程式的輸出會是如下:
95+
96+
C語言Fan! 這是您的第一個Java程式!
97+
98+
'\n' 對 C 程式設計人員並不陌生,它是換行字元,您也可以如下使用 println() 進行換行。
99+
100+
#### **範例 3.3 SecondJavaForC.java**
101+
```java
102+
public class SecondJavaForC {
103+
public static void main(String[] args) {
104+
System.out.printf("%s! 這是您的第二個Java程式!",
105+
"C語言Fan").println();
106+
}
107+
}
108+
```
109+
110+
程式的輸出會是如下:
111+
112+
C語言Fan! 這是您的第二個Java程式!
113+
114+
在 printf() 要指定數字對應的話,可以使用 '%d',例如:
115+
116+
#### **範例 3.4 ThirdJavaForC.java**
117+
```java
118+
public class ThirdJavaForC {
119+
public static void main(String[] args) {
120+
System.out.printf("%s! 這是您的第 %d 個Java程式!\n",
121+
"C語言Fan", 3);
122+
}
123+
}
124+
125+
```
126+
127+
'%s' 對應至 "C語言Fan",而 '%d' 對應至數字 3,所以程式的輸出會是如下:
128+
129+
C語言Fan! 這是您的第 3 個Java程式!
130+
131+
這邊再作一次提醒,printf() 方法是在 J2SE 5.0 之後才有的功能,1.4 或更早版本的 JDK 並沒有辦法編譯範例 3.2、3.3 與 3.4。
132+
133+
> **良葛格的話匣子** 如果您安裝的是 JDK6,即使您沒有使用到 JDK6 的新功能,所編譯出來的 class 檔預設也是無法在更早版本的 JRE 上運行的,因為 JDK6 編譯出來的 class 檔版號跟較早版本的JVM所接受的版號並不相同。
134+
>
135+
> 在不使用 JDK6 的新功能下,如果您希望編譯出來的 class 可以在 1.5 版本或之前版本上的環境上運行,則編譯時必須指定 -source 與 -target 引數,-source 指定原始碼中可以使用的版本功能,-target 指定編譯出來的位元碼適用的虛擬機器版本,例如您想要編譯出來的檔案在 1.5 版本環境上運行的話,可以如下編譯程式:
136+
>
137+
> <pre>javac -source 1.5 -target 1.5 HelloJava.java</pre>
138+
139+
3.1.3 為程式加入註解
140+
--------------------
141+
142+
在撰寫程式的同時,您可以為程式碼加上一些註解(Comment),說明或記錄您的程式中一些要注意的事項,Java 語言是您用來與電腦溝通的語言,而註解的作用則是與開發人員溝通。
143+
144+
原始碼檔案中被標註為註解的文字,編譯器不會去處理它,所以註解文字中撰寫任何的東西,對編譯出來的程式不會有任何影響。在 Java 中可以用兩種方式為程式加上註解,以範例 3.4 為例,您可以為它加上一些註解文字,例如:
145+
146+
```java
147+
/* 作者:良葛格
148+
* 功能:示範printf()方法
149+
* 日期:2005/4/30
150+
*/
151+
public class ThirdJavaForC {
152+
public static void main(String[] args) {
153+
// printf() 是J2SE 5.0的新功能,必須安裝JDK 5.0才能編譯
154+
System.out.printf("%s! 這是您的第 %d 個Java程式!\n",
155+
"C語言Fan", 3);
156+
}
157+
}
158+
```
159+
160+
'/*' 與 '*/' 用來包括跨行的註解文字,通常開發人員為了讓註解文字看來比較整齊清晰,中間還會使用一些 '*' 來排版,只要記得使用多行註解時,是以 '/*' 開始註解文字,以 '*/' 結束註解文字,所以您不能用巢狀方式來撰寫多行註解,例如下面的方式是不對的:
161+
162+
<pre>/* 註解文字1……bla…bla
163+
/*
164+
註解文字2……bla…bla
165+
*/
166+
*/</pre>
167+
168+
編譯器在處理前面的撰寫方式時,會以為倒數第二個 '*/' 就是註解結束的時候,因而對最後一個 '*/' 就會認為是錯誤的符號,這時就會出現編譯錯誤的訊息。
169+
170+
'//' 則可以用來撰寫單行註解,在 '//' 之後的該行文字都被視為註解文字,多行註解可以包括單行註解,例如:
171+
172+
<pre>/* 註解文字1……bla…bla
173+
// 註解文字2……bla…bla
174+
*/</pre>
175+
176+
註解的撰寫時機與內容並沒什麼特別的規定,以清晰易懂為主,註解的目的在於說明程式,是給開發人員看的,您可以使用註解在程式中寫下重要事項,日後作為備忘或是方便其他開發人員瞭解您的程式內容。
177+
178+
註解的另一個作用則是用來暫時註銷某些陳述句,當您覺得程式中某些陳述有問題,可以使用註解標示起來,如此編譯器就不會去處理,例如同樣以範例 3.4 為例:
179+
180+
```java
181+
public class ThirdJavaForC {
182+
public static void main(String[] args) {
183+
// System.out.println("C語言Fan!這是您的第3個Java程式!");
184+
System.out.printf("%s! 這是您的第 %d 個Java程式!\n",
185+
"C語言Fan", 3);
186+
}
187+
}
188+
```
189+
190+
在'//'之後的內容被視為註解文字,編譯器不會去處理,所以執行時不會執行該行陳述,如果日後要重新恢復那些陳述句的功能,只要將註解符號消去就可以了。
191+
192+
3.2 在文字模式下與程式互動
193+
--------------------------
194+
195+
待續 ...

0 commit comments

Comments
 (0)