Phương thức main trong Java thường là phương thức đầu tiên bạn tìm hiểu khi bắt đầu làm quen ngôn ngữ này, vì đây chính là điểm khởi đầu (entry point) để thực thi một chương trình Java. Phương thức main có thể chứa thẳng code để chạy hoặc gọi các phương thức khác. Nó cũng có thể được đặt trong bất kỳ class nào của chương trình.

Các chương trình phức tạp hơn thường có một class chỉ chuyên chứa phương thức main. Tuy class này có thể mang bất kỳ tên nào, thông thường ta hay đặt tên là main.
Trong các ví dụ dưới đây, class chứa phương thức main sẽ có tên là Test:
public class Test {
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
Trong bài viết này, chúng ta sẽ cùng tìm hiểu ý nghĩa của từng thành phần trong phương thức main.
Cú pháp của phương thức main trong Java
Cú pháp của phương thức main luôn có dạng này:
public static void main(String[] args){
// some code
}
Ta chỉ có thể thay đổi tên của đối số mảng String. Ví dụ, ta có thể đổi args thành my_args. Đối số mảng String có thể được viết theo kiểu String... args hoặc String args[].
public
Access modifier (Từ khóa quy định quyền truy cập) của phương thức main phải là public để JRE (Java Runtime Environment) có thể truy cập và thực thi phương thức này. Nếu một phương thức không phải là public, quyền truy cập của nó sẽ bị hạn chế.
Trong ví dụ sau, phương thức main thiếu access modifier public:
public class Test {
static void main(String[] args){
System.out.println("Hello, World!");
}
}
Khi bạn biên dịch và chạy chương trình, lỗi sau sẽ xuất hiện vì phương thức main không phải là public và JRE không thể tìm thấy nó:
javac Test.java
java Test
Error: Main method not found in class Test, please define the `main` method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
static
Khi một chương trình Java bắt đầu, chưa có đối tượng nào của class tồn tại. Phương thức main phải là static để JVM (Máy ảo Java) có thể nạp class đó vào bộ nhớ và gọi phương thức main mà không cần tạo một thực thể của class trước.
Trong ví dụ sau, phương thức main thiếu đi từ khóa static:
public class Test {
public void main(String[] args){
System.out.println("Hello, World!");
}
}
Khi bạn biên dịch và chạy chương trình, lỗi sau sẽ xuất hiện vì phương thức main không phải là static:
javac Test.java
java Test
Error: Main method is not static in class Test, please define the `main` method as:
public static void main(String[] args)
void
Mọi phương thức Java đều phải khai báo kiểu trả về. Kiểu trả về của phương thức main là void vì nó không trả về bất cứ giá trị nào. Khi phương thức main thực thi xong, chương trình Java sẽ kết thúc, do đó ta không cần đến một đối tượng trả về.
Trong ví dụ sau, phương thức main cố gắng trả về một giá trị trong khi kiểu trả về là void:
public class Test {
public static void main(String[] args){
return 0;
}
}
Khi bạn biên dịch chương trình, lỗi sau sẽ xuất hiện vì Java không mong đợi giá trị trả về nào khi kiểu trả về đã được đặt là void:
javac Test.java
Test.java:5: error: incompatible types: unexpected return value
return 0;
^
1 error
main
Phương thức main trong Java luôn được đặt tên là main. Khi một chương trình Java khởi chạy, nó sẽ luôn tìm kiếm một phương thức có tên main.
Ở ví dụ sau đây, phương thức main đã bị đổi tên thành run:
public class Test {
public static void myMain(String[] args){
System.out.println("Hello, World!");
}
}
Khi bạn biên dịch và chạy chương trình, lỗi sau sẽ xuất hiện vì JRE không thể tìm thấy phương thức main trong class:
javac Test.java
java Test
Error: Main method not found in class Test, please define the `main` method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
String[] args
Phương thức main của Java nhận một đối số (argument) duy nhất thuộc kiểu mảng String. Mỗi chuỗi trong mảng này là một đối số dòng lệnh. Bạn có thể sử dụng các đối số dòng lệnh để tác động đến hoạt động của chương trình hoặc để truyền thông tin cho chương trình tại thời điểm chạy (runtime).
Ví dụ sau minh họa cách in ra các đối số dòng lệnh mà bạn nhập vào khi chạy chương trình:
public class Test {
public static void main(String[] args){
for(String s : args){
System.out.println(s);
}
}
}
Khi bạn biên dịch chương trình trên và sau đó chạy nó với một vài đối số dòng lệnh được phân tách bằng dấu cách, các đối số này sẽ được in ra terminal:
javac Test.java
java Test 1 2 3 "Testing the main method"
1
2
3
Testing the main method
Kết luận
Chúng ta đã tìm hiểu về từng thành phần của phương thức main trong Java để giúp bạn hiểu rõ vai trò của từng từ khóa quan trọng. Kiến thức này sẽ giúp bạn dễ dàng xác định nguyên nhân khi chương trình không chạy hoặc tùy chỉnh điểm khởi chạy cho các mục đích cụ thể. Hãy tiếp tục hành trình học tập và phát triển kỹ năng lập trình Java của bạn bằng cách đọc các bài viết liên quan khác trên trang web của chúng tôi.