Phương thức tĩnh
Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 16 trên 87.
Tương tự như biến tĩnh thuộc về lớp chứ không phải các instance, phương thức tĩnh cũng thuộc về chính lớp đó. Bạn có thể gọi chúng mà không cần tạo đối tượng.
Khai báo một phương thức tĩnh bằng cách thêm từ khóa static:
public class MathHelper {
public static int add(int a, int b) {
return a + b;
}
public static int multiply(int a, int b) {
return a * b;
}
}
// Gọi phương thức mà không cần tạo đối tượng
int sum = MathHelper.add(5, 3); // 8
int product = MathHelper.multiply(4, 2); // 8Phương thức static có một hạn chế quan trọng: chúng không thể truy cập trực tiếp vào biến instance hoặc phương thức instance. Vì phương thức static tồn tại mà không cần đối tượng, nên không có tham chiếu this để sử dụng.
public class Counter {
private int count; // Biến instance
private static int total; // Biến tĩnh
public static void incrementTotal() {
total++; // Hợp lệ: truy cập biến tĩnh
// count++; // Lỗi! Không thể truy cập biến instance
}
}Phương thức tĩnh phù hợp với các thao tác tiện ích không phụ thuộc vào trạng thái của đối tượng, chẳng hạn như Math.sqrt() hoặc Integer.parseInt(). Chúng cung cấp chức năng phù hợp ở cấp lớp thay vì cho từng đối tượng riêng lẻ.
Thử thách
DễHãy tạo một lớp tiện ích StringUtils cung cấp các phương thức thao tác chuỗi hữu ích mà không cần tạo đối tượng nào, rất phù hợp để minh họa các phương thức static!
Bạn sẽ tạo hai tệp để sắp xếp code:
StringUtils.java: Tạo một lớp tiện ích có các phương thức static để thực hiện những thao tác chuỗi phổ biến:- Một phương thức static
countVowels(String text)trả về số nguyên âm (a, e, i, o, u, cả chữ hoa lẫn chữ thường) trong chuỗi đã cho - Một phương thức static
reverse(String text)trả về chuỗi theo thứ tự đảo ngược - Một phương thức static
isPalindrome(String text)trả vềtruenếu chuỗi đọc xuôi hay ngược đều giống nhau (không phân biệt chữ hoa chữ thường), nếu không thì trả vềfalse
- Một phương thức static
Main.java: Dùng lớp tiện ích để xử lý một chuỗi. Bạn sẽ nhận một đầu vào: một chuỗi văn bản. Gọi trực tiếp từng phương thức static thông qua tên lớp và in ra ba dòng:Vowels: [count]Reversed: [reversed string]Palindrome: truehoặcPalindrome: false
Bạn sẽ nhận một đầu vào: một chuỗi văn bản cần phân tích.
Hãy nhớ rằng bạn gọi phương thức static bằng tên lớp, chẳng hạn như StringUtils.countVowels(text), thay vì tạo một thực thể trước. Nhờ vậy, lớp tiện ích rất thuận tiện cho những thao tác không cần duy trì trạng thái giữa các lần gọi.
Tự làm thử
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
// TODO: Dùng các phương thức tĩnh của StringUtils để phân tích chuỗi
// Gọi StringUtils.countVowels(text) để đếm số nguyên âm
// Gọi StringUtils.reverse(text) để lấy chuỗi đảo ngược
// Gọi StringUtils.isPalindrome(text) để kiểm tra chuỗi có đối xứng không
// TODO: In kết quả theo định dạng:
// Vowels: [count]
// Reversed: [reversed string]
// Palindrome: true/false
}
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online