Java 入門指南
單元 4 - 變數命名規則
程式 (program) 裡需要自行定義的識別字 (identifier) 名稱非常多,例如類別 (class) 名稱、屬性 (field) 名稱、方法 (method) 名稱、參數 (parameter) 名稱、區域變數 (local variable) 名稱等等
ImageSprite
i
c
myWidth
run
runFast
getBackground()
MIN_WIDTH
MAX_WIDTH
GET_THE_CPU
有些名稱是自行定義的,有些名稱則屬於 Java API 中已經定義好的,例如 String 、 args 等。 Java API 是官方隨編譯器 (compiler) 提供的程式庫 (library) ,大多是類別定義,提供非常多樣的功能,例如資料結構、時間處理、輸入輸出、圖形介面、網路通訊等等,我們可以在需要時引入需要的類別,無須自行開發相同或類似的程式。
我們自行定義的識別字應避免與 API 中的相同,如果我們定義相同的識別字名稱,雖然可以通過編譯,但容易造成混淆,因此應避免,例如以下程式
/*
* 檔名:WrongName.java
* 作者:張凱慶
* 網站:http://kaiching.org
*/
package wrongname;
// 使用與 API 相同名稱的變數
public class WrongName {
public static void main(String[] args) {
String a = "22";
System.out.println();
System.out.println(a.getClass());
System.out.println();
// 變數 String 與 API 中的名稱相同
Integer String = 22;
System.out.println(String.getClass());
System.out.println();
}
}
執行結果如下
class java.lang.String |
class java.lang.Integer |
我們在 main() 方法中,使用 String 當類別名稱宣告變數 (variable) ,也用 String 當變數名稱,以 Integer 類別宣告,雖然可以順利編譯執行,然而容易造成混淆,因此我們不建議這樣使用。
事實上,由於 Java 直接支援 Unicode 編碼,因此識別字可以使用任何 Unicode 字元,如
/*
* 檔名:中文類別.java
* 作者:張凱慶
* 網站:http://kaiching.org
*/
package 中文類別;
// 使用中文當類別名稱
public class 中文類別 {
int 中文屬性 = 22;
public static void main(String[] args) {
中文類別 中文變數 = new 中文類別();
System.out.println();
System.out.println(中文變數.中文屬性);
System.out.println();
}
}
此例在 Mac 可以正常執行,在 Windows 可能無法正常執行。
執行結果如下
22 |
但我們不建議這麼做,因為識別字採用中文的話,一來輸入法的中文為全形字元,很多運算子 (operator) 與內建名稱仍是採用英文 ASCII 的半形字元,沒有留意到的話就很容易弄錯,再來大量的已開發模組 (module) 的識別字仍是採英文的命名習慣,所以要與國外接軌的話,自己命名的識別字仍是採用英文字母比較 ok 囉!
習慣上是採用英文二十六的大小寫字母為主,另加上數字、底線符號及金錢符號,如下表
_ | $ | ||||
a | b | c | d | e | f |
g | h | i | j | k | l |
m | n | o | p | q | r |
s | t | u | v | w | x |
y | z | ||||
A | B | C | D | E | F |
G | H | I | J | K | L |
M | N | O | P | Q | R |
S | T | U | V | W | X |
Y | Z | ||||
0 | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 |
類別以英文大寫字母開頭,若有多個英文單字組成,採取大寫駝峰型 (upper camel case)
SimpleGame
MyStory
ThreadTestDrive
RunThreads
方法或變數(包括參數、屬性等)以英文小寫字母開頭,若有多個英文單字組成,採取小寫駝峰型 (lower camel case)
actionPerformed
setUpNetworking
getField
myField
當然,也可以用底線符號連結每個英文單字,這就看個人偏好哩!
有沒有感覺到每一行程式都以分號結尾,若是漏打分號的話,編譯器還會中斷編譯,並且提供警告訊息。分號代表什麼意思呢?有分號結尾的程式碼,在 Java 稱之為陳述 (statement) ,簡單的陳述可由運算式 (expression) 組成,接下來我們繼續討論運算式與陳述吧!
相關教學影片
中英文術語對照 | |
---|---|
class | 類別 |
compiler | 編譯器 |
expression | 運算式 |
field | 屬性 |
identifier | 識別字 |
library | 程式庫 |
local variable | 區域變數 |
lower camel case | 小寫駝峰型 |
method | 方法 |
module | 模組 |
operator | 運算子 |
parameter | 參數 |
program | 程式 |
statement | 陳述 |
upper camel case | 大寫駝峰型 |
variable | 變數 |
參考資料 | |
---|---|
1. The Java™ Tutorials: Variables |
重點整理 |
---|
1. Java 的命名方式為大寫駝峰型與小寫駝峰型,兩者都是只用英文單字組合的命名方式。 |
2. 大寫駝峰型是每個英文單字的首字母都大寫。 |
3. 小寫駝峰型中,只有第一個英文單字的首字母小寫,其餘單字的首字母都大寫。 |
4. 使用大寫駝峰型的識別字有類別。 |
8. 使用小寫駝峰型有屬性、方法、參數等。 |
問題與討論 |
---|
1. 為什麼數字不能當變數的起始字元? |
2. 為什麼命名識別字要用有意義的英文單字? |
3. 大寫駝峰型跟小寫駝峰型的差別在哪裡?為什麼大部分類別要用大寫駝峰型? |
4. 為什麼識別字不能用空格? |
練習 |
---|
1. 建立一個新專案 Exercise0401 ,用數字當變數的起始字元,例如 2m ,觀察執行結果。 |
2. 建立一個新專案 Exercise0402 ,設計一個變數 apple_num ,然後把 apple_num 中的底線改成空格,觀察執行結果。 |