Bỏ qua để đến nội dung

Định nghĩa và tạo một phương thức

public class Main {
// <modifier> <kiểu trả về> <tên phương thức>(<tham số>) { ... }
static int square(int number) {
return number * number;
}
public static void main(String[] args) {
int result = square(5);
System.out.println(result); // 25
}
}

Một phương thức gồm:

  • modifier: public, private, static,… (quyền truy cập, phạm vi)
  • kiểu trả về: kiểu dữ liệu của giá trị phương thức trả về, hoặc void nếu không trả về gì
  • tên phương thức: theo quy ước camelCase
  • danh sách tham số: đặt trong (), mỗi tham số gồm kiểu và tên
  • thân phương thức: khối lệnh trong {}

2. Phương thức void - không trả về giá trị

Phần tiêu đề “2. Phương thức void - không trả về giá trị”
static void greet(String name) {
System.out.println("Xin chào, " + name + "!");
// không có return, hoặc dùng "return;" để thoát sớm mà không kèm giá trị
}

Nếu kiểu trả về không phải void, phương thức bắt buộc phải có câu lệnh return kèm giá trị đúng kiểu ở mọi nhánh có thể chạy tới:

static String classify(int score) {
if (score >= 50) {
return "Đạt";
} else {
return "Không đạt";
}
}
static int add(int a, int b) {
// thiếu return ở đây -> LỖI BIÊN DỊCH: missing return statement
}

Khác với C++ hay Python, Java không có hàm độc lập nằm ngoài class - mọi phương thức đều phải thuộc về một lớp:

// KHÔNG hợp lệ - phương thức phải nằm trong class
// int add(int a, int b) { return a + b; }
public class MathUtils {
static int add(int a, int b) { // hợp lệ - nằm trong class MathUtils
return a + b;
}
}

Trong các ví dụ trên, phương thức được khai báo static để có thể gọi trực tiếp từ mainkhông cần tạo đối tượng của class chứa nó:

public class Main {
static int square(int n) { return n * n; }
public static void main(String[] args) {
System.out.println(square(4)); // gọi trực tiếp, không cần "new Main()"
}
}

Nếu bỏ static, phương thức trở thành phương thức instance - phải tạo đối tượng của class rồi mới gọi được qua đối tượng đó. Sự khác biệt giữa static và instance method được nói kỹ hơn ở phần Hướng đối tượng (OOP).

  • Cú pháp: <modifier> <kiểu trả về> <tên>(<tham số>) { ... }
  • void nghĩa là không trả về giá trị; ngược lại bắt buộc phải có return ở mọi nhánh
  • Mọi phương thức trong Java phải thuộc về một lớp
  • static cho phép gọi phương thức mà không cần tạo đối tượng - chi tiết ở phần OOP