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 讓編譯器自動推斷型別:

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

var 只能用於區域變數,且必須在宣告時初始化。