2016-02-29 27 views
3
class WithoutMain { 
     static 
     {   
      System.out.println("Without main class!!!"); 
      System.exit(0);    
     } 
} 

當我試圖在java版本大於7的代碼中運行上面的代碼時,我得到了錯誤。 程序編譯成功,但沒有找到main類。主類應該包含方法:public static void main(String [] args)。爲什麼java(> = 7版本)不支持在沒有main方法的情況下運行程序?

有人可以請指導我,爲什麼Java不支持無主java7

+2

這與java版本有什麼關係?您無法運行沒有入口點的程序。 – f1sh

+1

只是一個問題,你是什麼意思「Java(> = 7)」?它是否適用於較舊版本的java?我的意思是,任何其他版本的java都會出現同樣的問題,因爲還需要入口點(main方法)。 –

+3

@ RicardNàcherRoig: - 是的,我們可以在沒有主要方法的情況下使用低於7的版本運行java程序。如果您將在低於7的版本上運行程序,它會發出「沒有主類!!!」 – PKS

回答

7

AFAIK此更改特定於Java 7.在Java 8中,您可以執行此操作。您不能在Java 7中執行此操作,因爲它無需首先加載失敗的類,而是查找該方法。在任何情況下,已經在Java中8

public class Main { 
    static { 
     System.out.println("Without main class!!! with " + System.getProperty("java.version")); 
     System.exit(0); 
    } 
} 

打印

Without main class!!! with 1.8.0_66 

注意改回:這會殺死整個程序。如果你想計劃,以確保沒有主運行,就可以做到這一點

public class Main { 
    static { 
     // do something which starts threads 
     System.out.println("Without main class!!! with " + System.getProperty("java.version")); 
     if (true) 
      throw new ThreadDeath(); 
    } 
} 

這將防止錯誤消息,但保持運行提供後臺線程有一個非守護線程。

+2

非常感謝Peter Lawrey清除我的懷疑。 – PKS

+1

我正在使用版本1.8.0_77,但仍然我的程序說主要方法未找到定義主要方法爲公共靜態void main(String [] args)。 @Peter Lawrey –

1

的靜態部分

static 
     {   
      System.out.println("Without main class!!!"); 
      System.exit(0);    
     } 

將每次JVM加載在內存中的類時執行後運行程序,但如果你想啓動一個Java應用程序,你將需要一個主要方法,因爲它是每個Java應用程序的起點,如果你沒有定義它,那麼JVM將不知道從哪裏開始。


可以擴展你的代碼,這樣做:

class WithoutMain { 
     static 
     {   
      System.out.println("Static section!!"); 

     } 

     public static void main(String[] args){ 
      System.out.println("Main class!!!"); 
     } 
} 

和輸出將是靜態部分,然後再在你的代碼在main方法定義。

0

每次啓動JVM並將類加載到類中時,靜態方法都會加載類,但沒有任何內容調用它或將其內容輸出到JVM中。作爲每種語言(我知道),你需要一個處理器來處理你的論點,而在Java的情況下,它是main()方法。

相關問題