Một phương thức là một tập hợp các khối lệnh (code) để thi hành một chức năng nào đó. Bài này chúng ta cùng nhau tìm hiểu kỹ hơn về các thành phần có trong một phương thức trong Java nhé.
Các thành phần trong phương thức
Thành phần | Mô tả |
---|---|
Access Specifier (hay Access Modifier) |
mô tả mức độ truy cập đến phương thức |
static |
đây là phương thức lớp |
abstract |
đây là phương thức không có cài đặt |
final |
phương thức này không thể ghi đè |
native |
phương thức này được viết trong một ngôn ngữ khác |
synchronized |
đây là phương thức đồng bộ |
returnType |
giá trị trả về của phương thức |
MethodName |
tên của phương thức |
throws exception |
khai báo các ngoại lệ có thể được nem ra từ phương thức |
Trong đó:
- accessLevel có thể là một trong các từ khoá
public
,private
,protected
hoặc bỏ trống, ý nghĩa của nó thể hiện cấp độ truy cập trong java. - static là từ khoá báo cho java biết đây là một phương thức tĩnh.
- abstract từ khoá cho biết đây là một lớp trừu tượng, nó không có cài đặt.
- final đây là từ khoá báo cho java biết đây là phương thức không thể ghi đè từ lớp con
- native đây là từ khoá báo cho java biết phương thức này được viết bằng một ngôn ngữ lập trình nào đó không phải là java ( thường được viết bằng C/C++)
- synchronized đây là một phương thức đồng bộ, nó rất hữu ích khi nhiều phương thức cùng truy cập đồng thời vào tài nguyên miền găng
- returnType là một kiểu dữ liệu, đây là kiểu trả về của phương thức, khi phương thức không trả về dữ liệu thì phải dùng từ khoá void
- MethodName là tên của phương thức, tên của phương thức được đặt theo quy tắc đặt tên của java
- throws là từ khoá dùng để khai báo các ngoại lệ có thể được ném ra từ phương thức, theo sau từ khoá này là danh sách các ngoại lệ có thể được phương thức này ném ra
Chú ý:
- Nếu trong lớp có ít nhất một phương thức trừu tượng thì lớp đó phải là lớp trừu tượng
- Không có thuộc tính trừu tượng
- Ta không thể tạo đối tượng của lớp trừu tượng
- Khác với ngôn ngữ C/C++, java bắt buộc bạn phải khai báo giá trị trả về cho phương thức, nếu phương thức không trả về dữ liệu thi dùng từ khoá void (trong C/C++ khi ta không khai báo giá trị trả về thì mặc định giá trị trả về là int)
Nhận giá trị trả về từ phương thức
Ta khai báo kiểu giá trị trả về từ lúc ta khai báo phương thức, bên trong thân của phương thức ta phải sử dụng phát biểu return value; để nhận về kết quả, nếu hàm được khai báo kiểu void thì ta chỉ sử dụng phát biểu return; mệnh đề return đôi khi còn được dùng để kết thúc một phương thức
Truyền tham số cho phương thức
Khi ta viết các phương thức, một số phương thức yêu cầu phải có một số tham số, các tham số của một phương thức được khai báo trong lời khai báo phương thức, chúng phải được khai báo chi tiết có bao nhiêu tham số, mỗi tham số cần phải cung cấp cho chúng một cái tên và kiểu dữ liệu của chúng.
Ví dụ: ta có một phương thức dùng để tính tổng của hai số, phương thức này được khai báo như sau:
java
public double tongHaiSo(double a, double b){
return (a + b);
}
Kiểu tham số
Trong java ta có thể truyền vào phương thức một tham số có kiểu bất kỳ, từ kiểu dữ liệu nguyên thuỷ cho đến tham chiếu đối tượng.
Tên tham số
Khi bạn khai báo một tham số để truyền vào phương thức thì bạn phải cung cấp cho nó một cái tên, tên nay được sử dụng bên trong thân của phương thức để tham chiếu đến tham số được truyền vào.
Lưu ý
Tên của tham số có thể trùng với tên của thuộc tính, khi đó tên của tham số sẽ “che” đi tên của phương thức, bởi vậy bên trong thân của phương thức mà có tham số có tên trùng với tên của thuộc tính, thì khi nhắc đến cái tên đó có nghĩa là nhắc đến tham số
Truyền tham số theo trị
Khi gọi một phương thức mà tham số của phương thức có kiểu nguyên thuỷ, thì bản sao giá trị của tham số thực sự sẽ được chuyển đến phương thức, đây là đặc tính truyền theo trị ( pass- by – value ), nghĩa là phương thức không thể thay đổi giá trị của các tham số truyền vào.
Ta kiểm tra điều này qua ví dụ sau:
java
public class TestPassByValue {
public static void test(int t) {
t++;
System.out.println("Gia tri của t bi?n trong ham sau khi tang len 1 la " + t);
}
public static void main(String[] args) {
int t = 10;
System.out.println("Gia tri của t tru?c khi gọi ham = " + t);
test(t);
System.out.println("Gia tri của t truoc khi gọi ham = " + t);
}
}
Ta sẽ nhận được kết quả ra như sau:
Kết quả
Gia tri của t truoc khi gọi ham = 10
Gia tri của t bên trong ham sau khi tang len 1 la 11 Gia tri của t truoc khi gọi ham = 10
Ví dụ về phương thức
Dưới đây là một số ví dụ về phương thức trong Java
Phương thức có Access Specifier
và returnType
trong Java
java
public int add(int a, int b) {
return a + b;
}
Trong ví dụ này, phương thức add
có mức độ truy cập public
, và nó trả về một số nguyên.
Phương thức static
trong Java
java
public static void printMessage() {
System.out.println("This is a static method.");
}
Phương thức printMessage
là một phương thức tĩnh (static), nghĩa là bạn có thể gọi nó trực tiếp từ lớp mà không cần tạo đối tượng của lớp đó.
Phương thức abstract
trong Java
java
public abstract void draw();
Trong ví dụ này, phương thức draw
là một phương thức trừu tượng (abstract), nghĩa là nó không có cài đặt trong lớp hiện tại và lớp chứa nó phải được đánh dấu là abstract.
Phương thức final
trong Java
java
public final void display() {
System.out.println("This is a final method.");
}
Phương thức display
là một phương thức cuối cùng (final), nghĩa là nó không thể được ghi đè (override) trong các lớp con.
Phương thức native trong Java
java
public native void nativeMethod();
Phương thức nativeMethod
được khai báo là một phương thức native, nghĩa là nó được viết bằng một ngôn ngữ khác và không có cài đặt trong Java.
Phương thức synchronized trong Java
java
public synchronized void process() {
// Code đồng bộ hóa ở đây
}
Phương thức process
là một phương thức đồng bộ (synchronized), nghĩa là chỉ một luồng có thể thực thi phương thức này tại một thời điểm.
- Phương thức có tham số và returnType:
java
public double calculateArea(double radius) {
return Math.PI * radius * radius;
}
Trong ví dụ này, phương thức calculateArea
nhận một tham số radius
kiểu double và trả về một giá trị kiểu double.
- Phương thức có tham số trùng tên với thuộc tính:
java
public void setName(String name) {
this.name = name; // Gán giá trị của tham số name cho thuộc tính name
}
Trong ví dụ này, tham số name
trùng tên với thuộc tính name
của lớp, để phân biệt, ta sử dụng từ khóa this
.
- Phương thức có throws exception:
java
public void readFile(String fileName) throws IOException {
// Code đọc file
}
Phương thức readFile
khai báo rằng nó có thể ném ra một IOException, và các cuộc gọi đến phương thức này phải xử lý hoặc khai báo ngoại lệ này.
Những ví dụ trên giúp bạn hiểu cách sử dụng các thành phần trong một phương thức Java và cách khai báo, triển khai và sử dụng chúng trong code của bạn.