變數
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就可以了,這就是程式語言中變數的作用:用來暫存資料。
對基本型態來說,想要宣告何種型態的變數,就使用 byte
、short
、int
、long
、float
、double
、char
、boolean
等關鍵字來宣告,變數在命名時有一些規則,它不可以使用數字作為開頭,也不可以使用一些特殊字元,像是 *、&、^、% 之類的字元,而變數名稱不可以與關鍵字(Keyword)同名,例如 int
、float
、class
等就不能用來作為變數,變數名稱也不可以與保留字(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
可以減輕宣告型態的負擔,對程式碼的可讀性也會有幫助。