Định nghĩa và gọi phương thức (method) trong Java

Đây là bài 15/62 bài của series môn học Ngôn ngữ lập trình Java

1. Định nghĩa phương thức (method)

Giả sử, cần tính tổng các số từ 1 đến 10, từ 25 đến 35 và từ 37 đến 49.

class Main {
    public static void main(String[] args) {
        int sum = 0;
        for(int i=1; i<=10; i++){
            sum += i;
        }
        System.out.println("Tong tu 1 den 10 la " + sum);
        sum = 0;
        for(int i=25; i<=35; i++){
            sum += i;
        }
        System.out.println("Tong tu 25 den 35 la " + sum);
        sum = 0;
        for(int i=37; i<=49; i++){
            sum += i;
        }
        System.out.println("Tong tu 37 den 49 la " + sum);
    }
}

Việc tính tổng từ 1-10, 25-35, và 37-49 là giống nhau. Có thể viết code một lần và tái sử dụng nó?

class Main {
    public static int sum(int a, int b){
        int result = 0;
        for(int i=a; i<=b; i++){
            result += i;
        }
        return result;
    }
    public static void main(String[] args) {
        System.out.println("Tong tu 1 den 10 la " + sum(1, 10));
        System.out.println("Tong tu 25 den 35 la " + sum(25, 35));
        System.out.println("Tong tu 37 den 49 la " + sum(37, 49));
    }
}

Khái niệm phương thức (method)

Một phương thức (method) còn gọi là hàm, là một tập các câu lệnh được nhóm lại với nhau nhằm thực hiện một công việc nào đó.

Cú pháp khai báo và định nghĩa phương thức

modifier returnValueType methodName(list of parameters){
	//method body
}
Định nghĩa phương thức method trong Java

Một phương thức bao gồm method headermethod body.

modifier có thể là public, protected, private nhằm xác định phạm vi truy cập của phương thức.

returnValueType là kiểu trả về của phương thức. Nếu phương thức không có kiểu trả về thì sử dụng void.

methodName là tên của phương thức.

list of parameters là danh sách các tham số của phương thức. Lưu ý, phương thức có thể không có tham số nào.

Cách gọi phương thức

Khi phương thức được gọi, các tham số hình thức được thay thế bởi các biến hoặc dữ liệu, được gọi là các tham số thực sự (actual parameters).

int maxValue = max(3, 4);
System.out.println(max(3, 4));

2. Phạm vi của biến cục bộ (local variable)

Biến cục bộ (local variable) là biến được khai báo trong một phương thức hoặc trong một khối lệnh. Biến cục bộ có phạm vi sử dụng chỉ trong phần chương trình mà biến có thể được tham chiếu.

Biến cục bộ trong Java

Có thể khai báo một biến cục bộ trùng tên nhiều lần trong các khối lệnh không lồng nhau. Nhưng không thể khai báo một biến cục bộ 2 lần trong các khối lồng nhau.

Phạm vị biến cục bộ trong Java

3. Nạp chồng (overloading) phương thức

Ví dụ, định nghĩa phương thức max với các tham số kiểu int. Nhưng nếu cần phải tìm max của hai số double? Giải pháp là tạo ra một phương thức khác có cùng tên nhưng với các tham số có kiểu double. Đó gọi là nạp chồng phương thức.

Nạp chồng phương thức (overloading methods) cho phép định nghĩa các phương thức với tên giống nhau.

class Main {
    /* Return the max of two int values */
    public static int max(int num1, int num2) {
        if (num1 > num2){
            return num1;
        }
        return num2;
    }
    /* Find the max of two double values */
    public static double max(double num1, double num2) {
        if (num1 > num2){
            return num1;
        }
        return num2;
    }
    /* Return the max of three double values */
    public static double max(double num1,double num2,double num3) {
        return max(max(num1, num2), num3);
    }
    public static void main(String[] args) {
        System.out.println("The maximum of 3 and 4 is " + max(3, 4));
        System.out.println("The maximum of 3.0 and 5.4 is " + max(3.0, 5.4));
        System.out.println("The maximum of 3.0, 5.4, and 10.14 is " + max(3.0, 5.4, 10.14));
    }
}
Kết quả
The maximum of 3 and 4 is 4
The maximum of 3.0 and 5.4 is 5.4
The maximum of 3.0, 5.4, and 10.14 is 10.14

Lời gọi hàm mơ hồ

Khi nạp chồng phương thức, có thể có nhiều hơn 1 kết quả trùng khớp cho 1 lời gọi hàm. Hiện tượng này gọi là lời gọi hàm mở hồ và làm chương trình sẽ gặp lỗi biên dịch.

class Main {
    public static double max(int num1, double num2) {
        if (num1 > num2){
            return num1;
        }
        return num2;
    }
    public static double max(double num1, int num2) {
        if (num1 > num2){
            return num1;
        }
        return num2;
    }
    public static void main(String[] args) {
        //ambiguous both method max
        System.out.println("The maximum of 3 and 4 is " + max(3, 4));
    }
}
Kết quả
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - reference to max is ambiguous both method max(int,double)

Các bạn không nên lạm dụng nạp chồng phương thức để tránh lời gọi hàm mơ hồ.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Các cấu trúc điều khiển vòng lặp while và do while trong JavaTruyền tham trị và tham chiếu cho phương thức trong Java >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.