Từ khóa static trong Java là một khái niệm quan trọng giúp quản lý bộ nhớ và truy cập các thành phần của lớp mà không cần phải tạo ra một thể hiện. Bài viết này sẽ khám phá chi tiết về ý nghĩa và ứng dụng của từ khóa static, cùng với khả năng ghi đè phương thức static trong Java. Bạn sẽ tìm hiểu cách hoạt động của các biến, phương thức, và khối khởi tạo static, cũng như sự khác biệt giữa ghi đè và che khuất phương thức static. Hãy cùng khám phá để nắm vững cách sử dụng static một cách hiệu quả trong lập trình Jav
1. Từ khóa static
là gì?
1.1. Định nghĩa
Từ khóa static
trong Java được sử dụng để khai báo các thành phần của lớp như biến, phương thức, và khối khởi tạo. Khi một thành phần được khai báo là static
, nó thuộc về lớp chứ không thuộc về bất kỳ thể hiện (instance) nào của lớp đó.
1.2. Ứng dụng
- Biến
static
:
- Biến
static
được chia sẻ giữa tất cả các thể hiện của lớp. Nó có thể được sử dụng để lưu trữ các giá trị chung cho tất cả các thể hiện.
- Ví dụ: Đếm số lượng thể hiện được tạo ra từ một lớp.
public class MyClass {
static int count = 0; // Biến static
public MyClass() {
count++; // Tăng biến count mỗi khi có thể hiện mới
}
public static void displayCount() {
System.out.println("Số lượng thể hiện: " + count);
}
}
- Phương thức
static
:
- Phương thức
static
có thể được gọi mà không cần tạo ra thể hiện của lớp. Nó thường được sử dụng cho các phương thức tiện ích hoặc các phương thức không phụ thuộc vào trạng thái của một thể hiện cụ thể.
- Ví dụ: Phương thức tính toán mà không cần tham chiếu đến bất kỳ dữ liệu nào của thể hiện.
public class Utility {
public static int add(int a, int b) {
return a + b; // Phương thức static
}
}
- Khối khởi tạo
static
:
- Khối này được sử dụng để khởi tạo các biến
static
. Nó sẽ được thực thi một lần khi lớp được tải vào bộ nhớ.
public class Example {
static {
System.out.println("Khối static được thực thi."); // Thực thi khi lớp được tải
}
}
2. Ghi đè phương thức static
2.1. Khái niệm ghi đè (Overriding)
Ghi đè là khả năng của một lớp con để định nghĩa lại phương thức của lớp cha. Điều này cho phép lớp con cung cấp một triển khai riêng cho phương thức đã được khai báo trong lớp cha.
2.2. Phương thức static
có thể ghi đè không?
Phương thức static
không thể bị ghi đè theo cách truyền thống. Khi một phương thức static
được khai báo trong một lớp con có cùng tên và tham số với phương thức static
trong lớp cha, phương thức này sẽ không thực sự ghi đè mà chỉ che khuất phương thức của lớp cha. Điều này có nghĩa là phương thức static
của lớp cha và lớp con có thể tồn tại song song mà không thay thế nhau.
2.3. Ví dụ về ghi đè phương thức static
class Parent {
static void display() {
System.out.println("Phương thức static trong lớp cha.");
}
}
class Child extends Parent {
static void display() {
System.out.println("Phương thức static trong lớp con.");
}
}
public class Test {
public static void main(String[] args) {
Parent.display(); // Gọi phương thức của lớp cha
Child.display(); // Gọi phương thức của lớp con
Parent obj = new Child();
obj.display(); // Gọi phương thức của lớp cha
}
}
2.4. Kết quả
Kết quả của đoạn mã trên sẽ là:
Phương thức static trong lớp cha.
Phương thức static trong lớp con.
Phương thức static trong lớp cha.
Điều này cho thấy rằng, khi bạn gọi display
từ một tham chiếu đến lớp cha (Parent
), phương thức của lớp cha sẽ được gọi, không phải phương thức của lớp con. Do đó, phương thức static
không thực sự bị ghi đè.
3. Kết luận
Từ khóa static
trong Java cho phép bạn khai báo các thành phần thuộc về lớp, không phụ thuộc vào thể hiện cụ thể. Mặc dù bạn có thể khai báo phương thức static
với cùng tên trong lớp con, nhưng phương thức này không ghi đè mà chỉ che khuất phương thức của lớp cha. Hiểu rõ về static
sẽ giúp bạn viết mã hiệu quả hơn trong quá trình phát triển ứng dụng Java.