一個(gè).java源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?
一個(gè).java源文件中可以有多個(gè)類,但只能有一個(gè)public的類,并且public的類名必須與文件名相一致。一個(gè)文件中可以只有非public類。如果只有一個(gè)類,并且是非public的,此類可以跟文件名不同。
為什么一個(gè)Java源文件中只能有一個(gè)public類呢?
1.每個(gè)編譯單元(文件)都只能有一個(gè)public類,這表示,每個(gè)編譯單元都有單一的公共接口,用public類來表現(xiàn)。該接口可以按要求包含眾多的支持包訪問權(quán)限的類。如果在某個(gè)編譯單元內(nèi)有一個(gè)以上的public類,編譯器就會(huì)給出錯(cuò)誤信息。
2.public類的名稱必須完全與含有該編譯單元的文件名相同,包含大小寫。如果不匹配,同樣將得到編譯錯(cuò)誤。
3.雖然不是很常用,但編譯單元內(nèi)完全不帶public類也是可能的。在這種情況下,可以隨意對(duì)文件命名。
當(dāng)一個(gè)Java源文件有多個(gè)類,并且都不是public類時(shí),會(huì)出現(xiàn)什么情況呢?
此時(shí)程序編譯通過,在相應(yīng)路徑下產(chǎn)生了多個(gè).class文件(對(duì)應(yīng)該源文件中類的數(shù)目)。直接點(diǎn)擊運(yùn)行,程序是不能運(yùn)行的,需要鼠標(biāo)右鍵點(diǎn)擊程序然后選擇Run As接著選擇Java Aplication最后選擇選數(shù)據(jù)來源運(yùn)行,就可以了。
總結(jié)一下就是:
一個(gè)Java源文件中可以定義多個(gè)類,但是最多只有一個(gè)類被public修飾,并且這個(gè)類的類名與文件名必須相同。若這個(gè)文件中沒有public的類,則文件名可隨便命名(前提是符合規(guī)范)。要注意的是,當(dāng)用javac指令編譯有多個(gè)類的Java源文件時(shí),它會(huì)給該源文件中的每一個(gè)類生成一個(gè)對(duì)應(yīng)的.class 文件。