Tại sao hàm main trong Java lại là public static?

Trong tất cả chúng ta khi bắt đầu tiếp cận học ngôn ngữ lập trình Java đều làm quen với hàm main trước tiên. Nhưng chúng ta thường không để ý đến đặc điểm của hàm này. Hàm main trong Java có đặc điểm là public static void và ít người để ý tại sao nó lại có đặc điểm đó. Nếu trong C hoặc C++ thì chúng ta cũng gặp hàm main nhưng hàm main này trả về kiểu int nhưng trong Java lại là void. Chúng ta cùng tìm hiểu ham main trong Java tại sao lại có những đặc điểm là public static void.

hoc-lap-trinh-java-co-ban-1

Vai trò của hàm main trong Java là gì?

Hàm main trong Java là điểm xuất phát cho bất kỳ một chương trình thuần Java nào. Trong chương trình Java, quá trình thực thi bắt đầu từ hàm main khi chúng ta chạy lệnh.

Mã:

thì JVM sẽ tìm đến hàm public static void main(String args[]) trong lớp đó và nếu không tìm thấy hàm đó thì quăng ra lỗi NoSuchMethodError:main và kết thúc chương trình.

Đặc điểm của hàm main trong Java

Hàm main phải được khai báo chặt chẽ và đủ ký tự theo đặc tả của Java, nếu không thì JVM không thể xác định được nó và chương trình của bạn sẽ không chạy. Đây là cú pháp khai báo hàm main.

public static void main(String args[])

Với Java 5 trở lên thì cú pháp khai báo hàm main là:

public static void main(String args)

Tai sao hàm main trong Java là static

Có những lý do sau đây:

  1. Hàm main là static nên JVM có thể gọi nó mà không cần phải tạo ra bất kỳ một thể hiện nào của lớp chứa hàm main. Trong C và C++ cũng có hàm main để làm điểm khởi đầu cho việc thực thi chương trình, ngôn ngữ Java sử dụng lại quy tắc này.
  2. Nếu hàm main không được khai báo static thì JVM phải tạo ra thể hiện của lớp chứa hàm main và vì hàm dựng(constructor) của lớp đó có thể được nạp chồng(overload) nên sẽ không có một cách chắc chắn để JVM tìm thấy hàm main chính xác của lớp đó.
  3. Hàm static và dữ liệu kiểu static được load vào bộ nhớ riêng gọi là context trong JVM, được tạo ra khi JVM load lớp đó. Trong khi hàm và dữ liệu không phải là static được khai báo trong các lớp thì cần phải được tạo ra trước khi sử dụng chúng. Vì thế hàm main là static thì nó sẽ được load vào JVM context và được thực thi.
  4. Java xác định rằng hàm hoặc biến nào được khai báo là public thì có thể truy xuất từ bên ngoài lớp đó. Vì hàm main là public nên JVM dễ dàng để truy xuất vào và thực thi nó.

Tại sao hàm main là void: Vì hàm main được thiết kế để thực thi một xử lý nào đó của lớp nên không có giá trị trả về

Tóm lại:

  1. Trong Java hàm main phải được khai báo là public static void.
  2. JVM sẽ quăng ra ngoại lệ NoSuchMethodExeption:main nếu nó không tìm thấy hàm main. Hàm main là điểm xuất phát của chương trình Java.
  3. Hàm main được thực thi bởi luồng đặc biệt gọi là luồng “main”. Chương trình Java sẽ chạy cho đến khi luồng main hoặc không còn luồng phụ nào sinh ra từ hàm main thực thi nữa.
  4. Ngoài static void và public bạn có thể sử dụng từ khóa final, synchronized và strictfp với hàm main trong Java.
  5. Hàm main có thể được nạp chồng như bất kỳ hàm khác nhưng JVM sẽ chỉ gọi hàm main khai báo theo đúng cú pháp trên.

Hy vọng bài viết này giúp ích cho các lập trình viên java.

 

Nhận xét