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.