Java 變數 (Variables)

變數是用來儲存資料的容器,每個變數都有名稱和資料型別。

宣告變數

Java 是靜態型別語言,宣告變數時必須指定資料型別:

// 語法:資料型別 變數名稱;
int age;
String name;
double price;

初始化變數

宣告變數時可以同時賦值:

int age = 25;
String name = "Alice";
double price = 99.5;
boolean isActive = true;

也可以先宣告,之後再賦值:

int score;
score = 100;

同時宣告多個變數

// 同一型別可以一起宣告
int x, y, z;
int a = 1, b = 2, c = 3;

// 不建議這樣寫(可讀性差)
int i = 1, j = 2, k = 3;

// 建議分開宣告
int i = 1;
int j = 2;
int k = 3;

變數命名規則

合法的變數名稱:

  • 可以包含字母、數字、底線 _、錢字號 $
  • 必須以字母、底線或錢字號開頭(不能以數字開頭)
  • 區分大小寫
  • 不能使用 Java 保留字
// 合法的變數名稱
int age;
int _count;
int $price;
int myNumber;
int my_number;
int myNumber2;

// 不合法的變數名稱
// int 2number;    // 不能以數字開頭
// int my-number;  // 不能使用連字號
// int class;      // 不能使用保留字

命名慣例

Java 變數通常使用 camelCase(駝峰式命名):

// 好的命名
int studentAge;
String firstName;
double totalAmount;
boolean isLoggedIn;

// 不好的命名
int x;           // 太短,無意義
int studentage;  // 沒有使用 camelCase
int STUDENTAGE;  // 全大寫通常用於常數

常數

使用 final 關鍵字宣告常數,常數的值不能被修改:

final double PI = 3.14159;
final int MAX_SIZE = 100;
final String APP_NAME = "MyApp";

// PI = 3.14;  // 編譯錯誤,不能修改常數

常數命名慣例使用 UPPER_SNAKE_CASE(全大寫底線分隔)。

變數型別

Java 變數主要分為三種:

1. 區域變數 (Local Variables)

在方法、建構子或區塊內宣告的變數:

public void myMethod() {
    int x = 10;  // 區域變數
    // x 只能在這個方法內使用
}

2. 實例變數 (Instance Variables)

在類別內、方法外宣告的變數,屬於物件:

public class Student {
    String name;  // 實例變數
    int age;      // 實例變數

    public void printInfo() {
        System.out.println(name);
    }
}

3. 類別變數 (Class Variables)

使用 static 宣告的變數,屬於類別:

public class Counter {
    static int count = 0;  // 類別變數

    public Counter() {
        count++;
    }
}

變數的預設值

區域變數沒有預設值,必須初始化才能使用:

public void test() {
    int x;
    // System.out.println(x);  // 編譯錯誤,x 尚未初始化
}

實例變數和類別變數有預設值:

型別預設值
int, byte, short, long0
float, double0.0
char'\u0000'
booleanfalse
參考型別null

var 關鍵字 (Java 10+)

Java 10 開始可以使用 var 讓編譯器自動推斷型別(Local Variable Type Inference):

var name = "Alice";      // 推斷為 String
var age = 25;            // 推斷為 int
var price = 99.5;        // 推斷為 double
var numbers = new int[]{1, 2, 3};  // 推斷為 int[]

使用限制

  • var 只能用於區域變數(方法內)。
  • 必須在宣告時同時初始化。
  • 不能用於類別欄位(Fields)或方法參數。

最佳實踐

使用 var 可以減少重複的類別名稱,特別是在泛型或複雜類別時:

// 傳統寫法
Map<String, List<String>> map = new HashMap<String, List<String>>();

// 使用 var(更簡潔)
var map = new HashMap<String, List<String>>();

雖然 var 很方便,但請避免在語意不明確時使用,以免降低程式碼可讀性:

var result = service.getData(); // 可讀性較差,不知道 result 是什麼型別