1. Local Variable (Biến cục bộ)
- Khai báo trong method, constructor, block.
- Tồn tại khi control vào scope, hủy khi thoát scope.
- Bắt buộc khởi tạo trước khi dùng (không có default value).
- Không dùng access modifier (public, private...), không static.
Ví dụ
public class LocalVarDemo {
public void show() {
int num = 100; // local variable
System.out.println("Số là: " + num);
}
public static void main(String[] args) {
new LocalVarDemo().show();
}
}
Kết quả: Số là: 100
2. Instance Variable (Biến thể hiện / trường)
- Khai báo trong class, ngoài method/block/constructor.
- Tạo khi
new Object(), hủy khi object bị GC. - Có default value (0, false, null...).
- Mỗi object có bản sao riêng.
Ví dụ
public class InstanceVarDemo {
int num; // instance variable
InstanceVarDemo(int n) { num = n; }
public void show() { System.out.println("Số: " + num); }
public static void main(String[] args) {
new InstanceVarDemo(75).show();
}
}
Kết quả: Số: 75
3. Static/Class Variable (Biến lớp / static field)
- Khai báo với từ khóa
statictrong class, ngoài method. - Tạo khi class load, hủy khi class unload (chương trình kết thúc).
- Chung cho tất cả instance của class.
- Truy cập qua
ClassName.varhoặcinstance.var(khuyến khích dùng class name).
Ví dụ
public class StaticVarDemo {
int num;
static int count = 0; // static variable
StaticVarDemo(int n) { num = n; count++; }
public void show() { System.out.println("Số: " + num); }
public static void main(String[] args) {
StaticVarDemo t1 = new StaticVarDemo(75); t1.show();
StaticVarDemo t2 = new StaticVarDemo(90); t2.show();
System.out.println("Tổng object tạo: " + count);
}
}
Kết quả:
Số: 75
Số: 90
Tổng object tạo: 2
Bảng tóm tắt
| Loại | Khai báo | Khởi tạo | Hủy | Phạm vi | Default |
|---|---|---|---|---|---|
| Local | Trong method/block | Bắt buộc gán giá trị | Thoát scope | Chỉ trong block | Không có |
| Instance | Trong class, ngoài method | Khi new object | Khi object GC | Cả class (qua instance) | 0/false/null |
| Static | Trong class + static | Khi load class | Khi unload class | Cả class (qua Class.name) | 0/false/null |