2010-12-15 50 views

Trả lời

12

main không cần phải là từ khóa trong java để JVM tìm kiếm nó khi bắt đầu thực thi. Không có xung đột với các phương pháp hay biến số khác cũng được gọi là main. Đây chỉ đơn giản là cách mà JVM spec được thiết kế. Nó rất có thể được mượn từ ngôn ngữ c.

Tham chiếu Java: keywords, invoking main.

+2

+1 Lưu ý rằng nó không chỉ là tên phương thức quan trọng, nó cũng cần phải là 'static' (có thể' void', quá) và lấy một 'String []' làm các đối số duy nhất của nó. – Thilo

+0

@Thilo: Đúng. Chữ ký phương thức phải là 'public static void main (String [] args)' để được gọi khi khởi động. – Asaph

+0

Quay lại Mac OS 7 cũ (hoặc 8?) Ngày, khi không có dòng lệnh, Mac JVM cũng sẽ cho phép một chính không có arg. Rất may, điều này đã được thống nhất ngay bây giờ (không hoạt động nữa). – Thilo

10

Nó chỉ được chỉ định trong JLS.

12 Execution

...

Một máy ảo Java khởi động bằng cách tải một lớp được chỉ định và sau đó gọi phương thức main trong lớp quy định này. Mục §12.1 vạch ra các bước tải, liên kết và khởi tạo có liên quan đến việc thực thi main, như giới thiệu về các khái niệm trong chương này. Các phần khác chỉ định chi tiết về tải (§12.2), liên kết (§12.3) và khởi tạo (§12.4).

...

12.1 Virtual Machine Start-Up

Một máy ảo Java bắt đầu thực hiện bằng cách gọi phương pháp main của một số lớp nhất định, đi qua nó một đối số duy nhất, đó là một mảng các chuỗi. Trong các ví dụ trong đặc điểm kỹ thuật này, lớp đầu tiên này thường được gọi là Test.

...

12.1.4 Invoke Test.main

Cuối cùng, sau khi hoàn thành việc khởi tạo cho lớp Test (trong đó khác tải do hậu quả, liên kết, và khởi tạo có thể xảy ra), phương pháp main của Test được gọi.

Phương thức main phải được khai báo public, staticvoid. Nó phải chấp nhận một đối số duy nhất là một chuỗi các chuỗi.

0

Nó gọi phương thức này bằng cách sử dụng phản chiếu. Bạn có thể có một cái nhìn vào nguồn Java Web Start ví dụ

+0

Nó gọi phương thức này bằng cách sử dụng sự phản chiếu. Vì vậy, điều này có nghĩa là tại thời gian chạy nó tìm kiếm các lớp học có phương pháp chính. đúng không? –

+2

Khi chạy tệp jar bạn chỉ định tên lớp bằng phương thức chính hoặc bạn có thể chỉ định lớp chính trong tệp kê khai trong jar. Trong Java Web Bắt đầu bạn chỉ định lớp chính trong tệp jnlp. –

-2

chính về cơ bản là một chỉ số phổ biến của phương pháp trung tâm để Java tự động làm cho nó trở thành phương pháp trung tâm khi được cung cấp với public static

public static void main 
+0

Tôi không chắc chắn ý bạn là gì ... nhưng đối với tôi, dường như nó không trả lời được câu hỏi. – icedwater

0

Về cơ bản tất cả các ngôn ngữ là ít nhiều giống với người tiền nhiệm của nó. Trong ngôn ngữ C nó là chính() mà thực hiện lúc đầu nhưng nó không bắt buộc phải xảy ra tất cả các thời gian. Các chương trình không có phương thức chính cũng có thể được thực thi. Vì vậy, nó chỉ là quy ước mà theo đó phương pháp chính được gọi lúc đầu tiên.

xin vui lòng kiểm tra:

Entry point for Java applications: main(), init(), or run()?

C program without a main function?

Các vấn đề liên quan