Hàm main trong hầu hết các ngôn ngữ lập trình có lẽ là hàm đầu tiên mà chúng ta làm quen khi học 1 ngôn ngữ mới. Nó đóng vai trò như 1 điểm bắt đầu (entry point) "nơi mà quyền điều khiển được chuyển từ hệ thống đến một chương trình máy tính, và tại đó thì CPU sẽ truy cập vào 1 chương trình hoặc một đoạn code và tiến hành thực thi."
Phần lớn động lực để tôi viết ra bài này là sau khi nói chuyện với vài người bạn về những nguyên tắc trong Java, chúng tôi nhanh chóng nhận ra là mình đã bỏ qua vài thứ cơ bản, cụ thể là hàm main. Do đó tôi đã thu thập các câu hỏi thú vị về chủ đề này, các bạn hãy thử trả lời chúng trước khi đọc đáp án nhé, và nếu không trả lời được thì cũng chả sao, đáp án trong này tôi cũng phải search google hết đấy
Từ main này chỉ là 1 convention lấy từ những ngôn ngữ như C và C++, nó không phải là một reserved keyword trong Java. Ví dụ bạn có thể đặt tên biến với nó:
int main;
Bạn đang xem: Public static void main(string args) là gì
The String <>args in the main method can never be null even if no arguments are passed. It is simply an empty initialized array of strings.
Tham số này trong hàm main không bao giờ null kể cả khi không có tham số nào được truyền vào. Nó chỉ đơn giản là một string array trống đã được khởi tạo.
Vị trí của modifier như public hay static không quan trọng đối với hàm main hay bất cứ hàm nào khác trong Java, nên static public void main cũng vẫn OK. Tuy vậy thì return type bắt buộc phải đi sau các modifier.
Bạn có thể overload hàm main miễn là nó khác signature. JVM sẽ chỉ gọi hàm main với parameter là String <>args mà thôi. Bạn cần phải tự gọi những hàm main khác nếu bạn muốn dùng chúng.
public class FunMainMethodTrivia { //Hàm main nguyên bản //JVM sẽ luôn gọi hàm này public static void main(String <>args) { // } //Overload hợp lệ //JVM sẽ không gọi nó public static void main(String s1) { //Bạn cần phải tự gọi nếu muốn dùng }//Overload hợp lệ //JVM sẽ không gọi nó public static void main(String s1, String s2, String s3) { //Bạn cần phải tự gọi nếu muốn dùng }}
Xem thêm: Bàn Ăn Nhập Khẩu Đài Loan, Bã N ÄN Hiá»N ÄÁº¡I TạI Tphcm
Câu trả lời là có, nhưng nó nằm sâu bên trong Android framework.
Nếu bạn tò mò đến mức đào sâu theo stack trace hay bất cứ một exception nào, bạn sẽ thấy nó đi qua Handler, Looper, MessageQueue và sau đó là entry point của chương trình của bạn. Có một class đặc biệt tên là ActivityThread có chứa hàm main đóng vai trò là entry point trong một chương trình Android.
public class Parent { public static void main(String <>args) { System.out.println("Im in the parent main method!"); }}//Chúng ta sẽ cho chạy class nàypublic class Child { public static void main(String <>args) { Parent.main(args); }}Câu trả lời là có, vẫn chạy bình thường.
Hàm static không thể được override.
public class Parent { public static void main(Object <>args) { System.out.println("Im in the main method!"); }}Câu trả lời là không. JVM chỉ quan tâm đến hàm có tham số là String<>, với trường hợp trên thì nó sẽ không tìm được entry point để khởi động chương trình.
Bài viết được dịch từ How well do you know the Java main method? 12 simple questions to test your knowledge! của tác giả Martin Ombura Jr.