Menu
CoddyTech

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);  // 8

Phươ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ẻ.

challenge icon

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ề true nế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
  • 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: true hoặc Palindrome: 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
        
    }
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Java online