變數

May 20, 2022

如果想使用基本型態資料,只要在程式中寫下 10、3.14 這類的數值即可。例如:

System.out.println(10);
System.out.println(3.14);
System.out.println(10);

宣告型態

想像一下程式中輸出 10 的部份很多,如果想要一次把它改為 20,那也要改很多地方,如果要求JVM有個位置可以暫存 10 這個值,每次都取出這個暫存位置的值來輸出,如果將暫存位置的值改為 20,那所有輸出不就都改為 20 了嗎?這個暫存位置在程式語言中稱為變數(Variable),你可以宣告(Declare)變數,也就是告訴 JVM,我要有個位置,這個位置叫作 xxx 名稱,可以放什麼型態的資料。例如:

int number = 10;
double PI = 3.14;
System.out.println(number);
System.out.println(PI);
System.out.println(number);

這個程式片段的第一行在告訴 JVM,我要有個位置,這個位置叫作 number 名稱,可以放 int 型態的資料,= 表示指定 number 名稱的位置會存放 10,用程式術語來說的話,你宣告了 number 變數,型態為 int,使用 = 指定運算子指定 number 變數的值為 10。

如果之後所有輸出 10 的部份改為 20,那就只要修改 number 變數的指定值為20就可以了,這就是程式語言中變數的作用:用來暫存資料。

對基本型態來說,想要宣告何種型態的變數,就使用 byteshortintlongfloatdoublecharboolean 等關鍵字來宣告,變數在命名時有一些規則,它不可以使用數字作為開頭,也不可以使用一些特殊字元,像是 *、&、^、% 之類的字元,而變數名稱不可以與關鍵字(Keyword)同名,例如 intfloatclass 等就不能用來作為變數,變數名稱也不可以與保留字(Reversed word)同名,例如 goto 就不能作為變數名稱。

變數命名的風格主要以清楚易懂為主。初學者為了方便,常使用一些簡單字母來作為變數名稱,這會造成日後程式維護的困難,命名變數時發生同名的情況也會增加。在 Java 領域中的命名慣例(Naming convention),通常會以小寫字母開始,並在每個單字開始時第一個字母使用大寫。例如:

int ageOfStudent;
int ageOfTeacher;

這種命名方式有個有趣的名稱,稱為駝峰式(Camel case)命名法,可讓人一眼就看出這個變數的作用。

目前為止,我們的程式範例都是撰寫在 main 方法(Method)中,在方法中宣告的變數稱為區域變數(Local variable)。Java 不可以宣告區域變數後未指定任何值給它之前就使用變數,編譯器遇到這種情況也會編譯錯誤。例如底下程式碼:

double score;
System.out.println(score);

這個程式片段宣告變數 score 卻沒有指定值給它,第二行馬上就要顯示值,就會產生以下編譯錯誤:

error: variable score might not have been initialized
        System.out.println(score);
                           ^

如果在指定變數值之後,就不想再改變變數值,可以在宣告變數時加上 final 限定,如果後續撰寫程式時,自己或別人不經意想修改 final 變數,就會出現編譯錯誤。例如這段程式碼會編譯錯誤:

final double PI = 3.141596;
PI = 3.14;

var 型態推斷

若編譯器可從前後文推斷出區域變數型態,可以使用 var 宣告變數,不用明確指定變數型態,例如:

var age = 10;              // age 型態為 int
var pi = 3.14;             // PI 型態為 double
var upper = 100000000000L; // upper 型態為 long
var tau = 3.14159F;        // tau 型態為 float
var isLower = true;        // isLower 型態為 boolean

適當地善用 var 可以減輕宣告型態的負擔,對程式碼的可讀性也會有幫助。

分享到 LinkedIn 分享到 Facebook 分享到 Twitter