2013-03-02 69 views
10

Theo kiến ​​thức của tôi, chúng tôi không thể thực thi mà không có phương thức chính vì khi bạn chạy chương trình java. java máy ảo tìm phương pháp chính .if JVM không thể tìm thấy phương pháp chính nó sẽ cho bạn thấy lỗi thời gian chạy Ngoại lệ trong chủ đề chính không thể tìm thấy lớp chính.Chúng ta có thể thực thi một chương trình java mà không có phương thức main() không?

Nhưng tôi đã tìm kiếm nhiều blog và một số người nói rằng, có thể thực hiện qua các blog tĩnh nếu có một khối tĩnh trong chương trình java, trình nạp lớp tải tất cả các khối tĩnh trước khi java gọi hàm main () phương pháp!.

Có thực sự khả thi không và khả năng sử dụng của chúng là gì.

+1

Sao chép câu hỏi này: http: // stackoverflow.com/questions/7591064/how-do-java-programs-run-without-define-the-main-method – christopher

+0

@ Chris Cooney nó không phải là trùng lặp. Câu hỏi này được hỏi bởi tôi trong một cuộc phỏng vấn sau đó tôi bắt đầu tìm kiếm cho những điều này tôi không bao giờ thấy bất kỳ bài viết khác trên stackoverflow. Điều tôi đang nói là theo nghiên cứu của tôi. –

+0

Câu hỏi được hỏi về cách chạy mã mà không có phương thức chính. Đó là một bản sao .. – christopher

Trả lời

19

Hiện tại - không


Trước Java 7:

Vâng, chuỗi như sau:

  • JVM tải lớp
  • thực hiện khối tĩnh
  • tìm kiếm phương pháp chính và gọi nó

Vì vậy, nếu có mã trong một khối tĩnh, nó sẽ được thực hiện. Nhưng không có điểm nào trong việc đó.

Làm thế nào để kiểm tra rằng:

public final class Test { 
    static { 
     System.out.println("FOO"); 
    } 
} 

Sau đó, nếu bạn cố gắng chạy (dòng hoặc lệnh mẫu với java Test hoặc với một IDE) lớp, kết quả là:

FOO
java.lang.NoSuchMethodError: main

+0

Câu trả lời này chỉ hợp lệ đối với các phiên bản Java "không dùng nữa" (tối đa phiên bản 6). – xehpuk

+0

đã cập nhật ........ – Bozho

2

vì bạn đã gắn thẻ Java-ee - sau đó điều đó là có thể.

và trong java lõi cũng có thể sử dụng static blocks

và rà soát này How can you run a Java program without main method?

Edit:
như đã chỉ ra trong câu trả lời khác - đó là không hỗ trợ trong Java 7

+0

Tôi muốn biết đặc biệt về java cốt lõi. –

+0

thêm liên kết cho điều đó - Bằng cách này nó không có ý nghĩa để làm như vậy - như sử dụng IDE nó sẽ không chạy – exexzian

+0

lý do tại sao nó sẽ không chạy –

1

Bạn nên cũng có thể thực hiện một điều tương tự bằng cách sử dụng premain method of a Java agent.

The manifest of the agent JAR file must contain the attribute Premain-Class. The value of this attribute is the name of the agent class. The agent class must implement a public static premain method similar in principle to the main application entry point. After the Java Virtual Machine (JVM) has initialized, each premain method will be called in the order the agents were specified, then the real application main method will be called. Each premain method must return in order for the startup sequence to proceed.

2

Có Bạn có thể biên dịch và thực thi mà không có phương thức chính Bằng cách sử dụng khối tĩnh. Nhưng sau khi khối tĩnh được thực thi (đã in), bạn sẽ gặp lỗi khi không tìm thấy phương thức chính nào.

Và INFO mới nhất -> BẠN không thể Thực hiện việc này với phiên bản JAVA 7. CNTT sẽ không thực thi.

{ 
    static 
    { 
     System.out.println("Hello World!"); 
     System.exit(0); // prevents “main method not found” error 
    } 
} 

Nhưng điều này sẽ không thực thi với phiên bản JAVA 7.

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