Java 入門指南

單元 4 - 變數命名規則

~~學習進度表~~

程式 (program) 裡需要自行定義的識別字 (identifier) 名稱非常多,例如類別 (class) 名稱、屬性 (field) 名稱、方法 (method) 名稱、參數 (parameter) 名稱、區域變數 (local variable) 名稱等等

Raster
ImageSprite
i
c
myWidth
run
runFast
getBackground()
MIN_WIDTH
MAX_WIDTH
GET_THE_CPU

有些名稱是自行定義的,有些名稱則屬於 Java API 中已經定義好的,例如 Stringargs 等。 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 囉!

習慣上是採用英文二十六的大小寫字母為主,另加上數字、底線符號及金錢符號,如下表

_$
abcdef
ghijkl
mnopqr
stuvwx
yz
ABCDEF
GHIJKL
MNOPQR
STUVWX
YZ
012345
6789

類別以英文大寫字母開頭,若有多個英文單字組成,採取大寫駝峰型 (upper camel case)

SimpleGame
MyStory
ThreadTestDrive
RunThreads

方法或變數(包括參數、屬性等)以英文小寫字母開頭,若有多個英文單字組成,採取小寫駝峰型 (lower camel case)

actionPerformed
setUpNetworking
getField
myField

當然,也可以用底線符號連結每個英文單字,這就看個人偏好哩!

有沒有感覺到每一行程式都以分號結尾,若是漏打分號的話,編譯器還會中斷編譯,並且提供警告訊息。分號代表什麼意思呢?有分號結尾的程式碼,在 Java 稱之為陳述 (statement) ,簡單的陳述可由運算式 (expression) 組成,接下來我們繼續討論運算式與陳述吧!

相關教學影片

上一頁 單元 3 - 基本資料型態與參考
回 Java 入門指南首頁
下一頁 單元 5 - 運算式與陳述
回 Java 教材首頁
回程式語言教材首頁
中英文術語對照
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 中的底線改成空格,觀察執行結果。