程式 (program) 裡需要自行定義的識別字 (identifier) 名稱非常多,例如類別 (class) 名稱、屬性 (field) 名稱、方法 (method) 名稱、參數 (parameter) 名稱、區域變數 (local variable) 名稱等等
有些名稱是自行定義的,有些名稱則屬於 Java API 中已經定義好的,例如 String 、 args 等。 Java API 是官方隨編譯器 (compiler) 提供的程式庫 (library) ,大多是類別定義,提供非常多樣的功能,例如資料結構、時間處理、輸入輸出、圖形介面、網路通訊等等,我們可以在需要時引入需要的類別,無須自行開發相同或類似的程式。
我們自行定義的識別字應避免與 API 中的相同,如果我們定義相同的識別字名稱,雖然可以通過編譯,但容易造成混淆,因此應避免,例如以下程式
001 | // 使用與 API 相同名稱的變數 |
002 | public class WrongName { |
003 | public static void main(String[] args) { |
004 | String a = "22"; |
005 | |
006 | System.out.println(); |
007 | System.out.println(a.getClass()); |
008 | System.out.println(); |
009 | |
010 | // 變數 String 與 API 中的名稱相同 |
011 | Integer String = 22; |
012 | |
013 | System.out.println(String.getClass()); |
014 | System.out.println(); |
015 | } |
016 | } |
017 | |
018 | /* 檔名: WrongName.java |
019 | 作者: Kaiching Chang |
020 | 時間: September, 2014 */ |
編譯後執行,結果如下
我們在 main() 方法中,使用 String 當類別名稱宣告變數 (variable) ,也用 String 當變數名稱,以 Integer 類別宣告,雖然可以順利編譯執行,然而容易造成混淆,因此我們不建議這樣使用。
事實上,由於 Java 直接支援 Unicode 編碼,因此識別字可以使用任何 Unicode 字元,如
001 | // 使用中文當類別名稱 |
002 | public class 中文類別 { |
003 | int 中文屬性 = 22; |
004 | |
005 | public static void main(String[] args) { |
006 | 中文類別 中文變數 = new 中文類別(); |
007 | |
008 | System.out.println(); |
009 | System.out.println(中文變數.中文屬性); |
010 | System.out.println(); |
011 | } |
012 | } |
013 | |
014 | /* 檔名: 中文類別.java |
015 | 作者: Kaiching Chang |
016 | 時間: September, 2014 */ |
編譯後執行,如下
但我們不建議這麼做,因為識別字採用中文的話,一來輸入法的中文為全形字元,很多運算子 (operator) 與內建名稱仍是採用鍵盤上直接輸入的英文、數字或符號,這些是半形字元,沒有留意到的話就很容易弄錯,再來大量的已開發模組 (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) 組成,接下來我們繼續討論運算式與陳述吧!
中英文術語對照
程式 | program |
識別字 | identifier |
類別 | class |
屬性 | field |
方法 | method |
參數 | parameter |
區域變數 | local variable |
編譯器 | compiler |
程式庫 | library |
變數 | variable |
運算子 | operator |
模組 | module |
大寫駝峰型 | upper camel case |
小寫駝峰型 | lower camel case |
陳述 | statement |
運算式 | expression |
重點整理
- 識別字為程式中自行定義的名稱,自行定義的識別字名稱應該避免與 API 中相同。
- 任何 Unicode 字元都可以拿來當 Java 的識別字名稱,習慣上仍是以英文二十六個字母大小寫、數字、金錢符號與底線為主。
- 識別字命名大都用有意義的英文單字組合,類別的定義多半採大寫駝峰型,方法或變數多半採小寫駝峰型。
- 分號為陳述的結尾,漏打分號會產生編譯錯誤。
問題與討論
- 數字可以當作識別字的起始字元嗎?
- 為什麼命名變數要用有意義的英文單字?
- 大寫駝峰型跟小寫駝峰型的差別在哪裡?為什麼要有不同的命名習慣?
the end
沒有留言:
張貼留言