2011-03-05 83 views
6

每個Java程序都需要 存在至少一個類。Java中的每個程序都需要一個類嗎?

上述說法總是正確的嗎?

+2

對於核心和企業Java以及其他任何類型而言,總是如此。 – duffymo 2011-03-05 14:30:09

+2

您需要加載對象和字符串,然後才能加載空的mian(String [])方法,這會產生三個;) – 2011-03-05 15:07:24

+1

@Peter:它位於'java。*'包中的200個類的某處;看到我更新的答案。 – 2011-03-05 15:20:50

回答

20

是的,你至少需要一個類纔能有一個程序,但是沒有,你不需要任何方法(與其他答案相反)。

你需要一個類的原因是因爲在Java中,所有代碼都在類內部。所以要有任何代碼,你需要一個類。但是,代碼不一定需要在方法中。它也可以在初始化器中。所以,在這裏是沒有方法的完整的Java程序:

class LookMaNoMethods { 
    static { 
     System.out.println("Hello, world!"); 
     System.exit(0); 
    } 
} 

這一點讓...

$ javac LookMaNoMethods.java 
$ java LookMaNoMethods 
Hello, world! 
$ 

編輯:從Java 7只靜態塊上面的代碼並沒有主要的方法不產生任何輸出。主要方法現在是強制性的。沒有main方法的代碼編譯成功。

+1

有趣。具有靜態初始化器的類是一個有效的程序,即使沒有'main'方法,如果沒有靜態初始化器,那麼將再次需要該方法。我想知道標準究竟是如何準確地說明入口點的要求。 – 2011-03-05 14:53:21

+1

靜態塊在內部實現爲特殊類型的方法(「」)。至少AFAIK。但仍然是一個很好的答案,我從來沒有意識到你可以在沒有main()的情況下開始一種方法......很高興知道。 – Boris 2011-03-05 15:05:47

+5

此程序僅適用於因爲靜態初始化程序在顯示有關缺少主要方法的錯誤消息之前調用System.exit()。 – 2011-03-05 17:21:43

2

是的。在Java中,您總是需要一個具有main函數的類來讓JRE運行它。

+3

這不是原因。 Ruby也是面向對象的,但它不需要任何類。原因只是「因爲」。 – 2011-03-05 14:29:39

+0

嗯,我同意這個意思是不正確的。 '太陽想要這樣嗎?'。 – Konerak 2011-03-05 14:30:22

+1

Groovy(顯然建立在JVM之上)不需要任何類來運行。但是生成的字節碼定義了幕後的類。 – 2011-03-05 14:33:14

6

程序需要一個入口點。入口點必須是一種方法。在Java中,每個方法都必須包含在一個類中。

這意味着每個程序都必須至少有一個類。

+1

這是一個非常合理的答案,但「入門點必須是一種方法」並不完全是真實的。看到我的答案是一個不是方法的入口點。 – rlibby 2011-03-05 14:48:19

6

從JVM的角度來看;是。從程序員的角度來看,它可以是Class或Enum。

public enum AAA { 

    AAA; 

    public static void main(final String[] args) { 
     System.out.println("H"); 
    } 

} 

編輯:即使你有一個空的main方法的類,有很多它的幕後工作,只需運行「空」類你的核心類。可以通過設置-verbose:class JVM參數來查看這些類的列表(大約200個來自java.*程序包)。

+1

Java枚舉*很怪異。 – 2011-03-05 14:39:18

+2

但是Enum是一個類:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html。新的關鍵字是隱藏類關鍵字的語法糖。 – duffymo 2011-03-05 15:45:03

0

是的,你至少需要一門課。

相關問題