.:: CODE SNIPPET ::.

"Your time is limited, so don't waste it living someone else's life"

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


Hàm main trong Java là hàm đầu tiên mà lập trình viên biết đến khi bắt đầu học lập trình Java. Bạn có bao giờ nghĩ là tại sao hàm main trong Java là public static void hay không? Hầu hết chúng ta đã học C hoặc C++ thì khi qua học Java hàm main cũng như hàm main bên đó, nhưng trong Java thì có một chút khác biệt là hàm main trong Java không  trả về một giá trị nào trong khi trong C thì trả về int. Trong bài viết này, chúng ta sẽ cố gắng trả lời cho câu hỏi tại sao hàm main lại là public static void.

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 bạn viết tên của một lớp chính trong Java, 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.

Dấu hiệu của hàm main trong Java

Hàm main phải nghiêm chỉnh tuân theo những ký tự mà nó phải có, nếu không thì JVM không thể định vị được nó và chương trình của bạn sẽ không chạy. Đây là dấu chỉ chính xác của hàm main

public static void main(String args[])

Dấu hiệu này là dấu hiệu trước đây và từ Java 5 bạn cũng có thể khai báo hàm main trong Java như sau:

public static void main(String args)

Tai sao hàm main trong Java là static

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

  1. Vì hàm main là hàm static 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.
  2. Vì 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, Java sử dụng lại quy luật này.
  3. 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ì constructor có thể được overload và có thể có tham số nên sẽ không có một cách chắc chắn nào để JVM tìm thấy hàm main trong Java.
  4. Bất cứ điều gì được khai báo trong các lớp trong Java thì chịu ảnh hưởng của loại dữ liệu của tham số và cần phải được tạo ra trước khi sử dụng chúng, nhưng hàm static và dữ liệu kiểu static được load vào vùng nhớ riêng trogn JVM gọi là context, được tạo ra khi lớp được load lên. Nếu hàm main là static thì nó sẽ được load vào JVM context và được thực thi.

Tại sao hàm main là public: 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 không trả về giá trị nào nên nó là void thui. 🙂

Tóm lại:

  1. Hàm main phải được khai báo là public static void trong Java nếu không thì JVM không thể chạy chương trình.
  2. JVM sẽ quăng ra lỗi NoSuchMethodExeption:main nếu nó không tìm thấy hàm main được được hàm main.
  3. Hàm main là điểm xuất phát của chương trình Java.
  4. Hàm main được chạy bởi luồng đặc biệt gọi là luồng “main” trong Java. Chương trình Java của bạn 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 chạy nữa.
  5. Bạn có thể khai báo hàm main sử dụng public static void main(String…args) từ Java 1.5
  6. Ngoài static void và public bạn có thể sử dụng final, synchronized và strictfp trong dấu hệu của hàm main trong Java.
  7. Hàm main có thể được overload như bất kỳ hàm khác nhưng JVM sẽ chỉ gọi hàm main được xác định với những dấu hiệu trên.
  8. Bnaj có thể sử dụng throws trong dấu hiệu của hàm main và quăng ra ngoại lệ.
Advertisements

One response to “Tại sao hàm main trong Java lại là public static?

  1. Thiên Bình August 28, 2014 at 8:01 PM

    kha cu the ti mi thanks bro nhieu nha

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: