Static Variable (Biến tĩnh) là gì?
1. Static Variable (Biến tĩnh) là gì?
- Là biến được khai báo với từ khóa
static
bên trong một lớp nhưng bên ngoài các phương thức. - Thuộc về lớp (class) thay vì thuộc về từng đối tượng (instance) cụ thể.
- Chỉ có một bản sao duy nhất trong bộ nhớ, dùng chung cho tất cả các đối tượng của lớp đó.
- Được khởi tạo khi lớp được nạp vào bộ nhớ và tồn tại cho đến khi chương trình kết thúc.
2. Cú pháp khai báo:
class MyClass {
static int count = 0; // Biến static
public MyClass() {
count++; // Tăng giá trị mỗi khi tạo một đối tượng mới
}
}
3. Đặc điểm quan trọng của biến static:
- Truy cập trực tiếp qua tên lớp mà không cần tạo đối tượng:
System.out.println(MyClass.count);
- Giá trị của biến static được chia sẻ giữa tất cả các đối tượng:
MyClass obj1 = new MyClass(); MyClass obj2 = new MyClass(); System.out.println(MyClass.count); // Kết quả: 2
4. Phân biệt với biến instance (biến đối tượng)
Đặc điểm | Biến Static | Biến Instance |
---|---|---|
Khai báo | Dùng từ khóa static |
Không dùng static |
Gán với | Lớp (Class) | Từng đối tượng (Instance) |
Số lượng | Chỉ có một bản duy nhất trong bộ nhớ | Mỗi đối tượng có một bản riêng |
Truy cập | Qua tên lớp hoặc đối tượng | Chỉ truy cập qua đối tượng |
Vòng đời | Tồn tại suốt vòng đời của chương trình | Tồn tại khi đối tượng còn được tham chiếu |
5. Ví dụ minh họa
class Student {
int id; // Biến instance
String name; // Biến instance
static String college = "DTU"; // Biến static
Student(int id, String name) {
this.id = id;
this.name = name;
}
void display() {
System.out.println(id + " " + name + " " + college);
}
}
public class TestStatic {
public static void main(String[] args) {
Student s1 = new Student(1, "An");
Student s2 = new Student(2, "Bình");
s1.display();
s2.display();
// Thay đổi giá trị biến static thông qua tên lớp
Student.college = "HUST";
s1.display();
s2.display();
}
}
Output:
1 An DTU
2 Bình DTU
1 An HUST
2 Bình HUST
6. Khi nào nên dùng biến static?
- Khi một biến không cần thay đổi giữa các đối tượng (vd: tên trường, mã công ty, số lần tạo đối tượng,...).
- Khi cần dùng chung một tài nguyên như counter, cấu hình, danh sách dữ liệu dùng chung.