2010-03-18 51 views
7

當我編譯一個空的java文件時,它沒有產生任何類文件。所以想知道在編譯一個空的java文件時編譯器是如何反應的。它應該在此產生一個空的類文件,爲什麼它沒有?如果你編譯一個空的java文件會發生什麼?

+2

聽起來像你回答你自己的問題。如果你想知道它爲什麼會發生,那是一個不同的問題。 – MatrixFrog 2010-03-18 05:36:49

+0

我問我爲什麼也這麼想。 – GuruKulki 2010-03-18 05:39:47

+0

這就是發生了什麼,如果(javaFileContent.indexOf(「class」)< - 1)return null; :)我只是在開玩笑 – medopal 2010-03-18 07:03:57

回答

14

javac開始,看有沒有在文件中聲明的類,和完成。爲了創建.class文件,您至少必須在文件中具有類聲明。

+0

因此,這意味着一個成功的編譯沒有錯誤? – user55924 2017-07-13 04:49:01

1

如果該文件是完全空的,只是所謂的.java那麼就沒有編譯器,當您試圖生成一個類文件做。如果你有在java文件,然後空CALSS文件(讓Foo.class)一

class Foo { 
} 

段將產生

2

那麼考慮到Java文件可能是這樣的:

// Foo.java 
class Bar 
{ 
} 

它如何知道該怎麼稱呼這件事?也應該使它成爲一個類或接口或枚舉?

而不是讓你什麼都不做的選擇(我本來期望的錯誤自己...但沒有什麼是做的一樣好一個理智的事情)。

+0

幾乎爲空的.java文件用於包註釋,因此對空白源文件不做任何處理會比將其視爲錯誤更有意義。請參閱http://java.sun。com/docs/books/jls/third_edition/html/packages.html#7.4.1.1 – 2010-03-18 05:52:15

+0

未命名的包雖然真的是空的... – TofuBeer 2010-03-18 06:04:56

6

大部分的答案說的話是真的,一個類文件不是編譯的Java文件,而是一個類的二進制表示。

編譯Java文件可能會導致兩個類文件,如果java文件包含兩個類(雖然只能有一個公共的),這就是爲什麼編譯一些與零班會導致零類文件。

-1

javac的開始,並檢查文件的大小,如果它爲零,那麼它只是返回不會造成任何的.class文件。

0

javac爲每個類聲明(顯式或匿名)創建一個類文件。 因爲你的java文件不包含任何東西,所以編譯器不會生成任何類文件。

1

如果您想聲明該類(例如,public class test{ }),它會編譯並創建test.class文件。它不會運行b'cos它不具有main方法。

+0

實際上可以創建(至少在OpenJDK 1.6中)一個空文件並編譯它,但是:1.它不會生成'.class'文件並且2.它不會生成警告。 – rbrito 2012-11-29 15:38:02

1

類Emptyclass {}

// Emptyclass可以成功地進行編譯,也生成.class文件,但在執行過程中失敗了,因爲JVM亙古不找「主要方法」類「Emptyclass」

+0

雖然真的,執行失敗不是問題,是它:-) – kleopatra 2012-10-03 15:02:45

0

Java不會創建該java文件的類文件。因爲首先它會查找班級名稱。所以什麼都不會發生

相關問題