原文:http://blog.csdn.net/shaoxiaoning/article/details/40424087
當編寫一個Java源代碼文件時,此文件通常被稱為編譯單元(有時也稱為轉譯單元)。每個編譯單元都必須要有一個后綴為.java,而在編譯單元內測可以 有一個public類,該類的名稱必須與文件名稱相同(包括大小寫,但不包括文件的后綴名.java)。每個編譯單元只能有一個public類,否則編譯 器就不會接受。如果在該編譯單元之中還有額外的類的話,那么在包之外的世界是無法看見這些類的,這是因為他們不是public類,而且他們主要用來為主要 public類提供支持。
1. 每個編譯單元(文件)都只能有一個public類。這表示,每個編譯單元都有單一的公共接口,用public類來表現。該接口可以按要求包含眾多的支持包訪問權限的類。如果在某個編譯單元內有一個以上的public類,編譯器就會給出出錯信息。
2. public類的名稱必須完全與含有該編譯單元的文件名相匹配,包括大小寫。所以對于Widget而言,文件的名稱必須是Widget.java,而不是widget.java或WIDGET.java。如果不匹配,同樣將得到編譯時錯誤。
3. 雖然不是很常用,但編譯單元內完全不帶public類也是可能的。這種情況下,可以隨意對文件命名。(盡管隨意命名會使得人們在閱讀和維護代碼時產生混淆。)
一個Java文件可以有多個類作為內部類/Adapter類/其它類,但是只能有一個public類,且類名必須和文件名一致。這是這類語言的一個不好的地方。
在現實情況中,經常有一些很小的類由幾個類共同需要,因此無法作為內部類,而且接口關系必須設置為public,這樣就導致了大量很小的.Java程序,每個都只有幾百字節。
這類語言的另一個問題是一個類的所有實現的方法都必須包含在同一個文件中。在swing應用程序中,經常導致長達一兩百K字節的源程序,行數達到三四千行,搞得JBuilder奇慢無比。
一個 .java 文件,可以有多個類,但是文件名只能有一個,用哪一個類名來充當文件名呢?其實文件名是無所謂的,因為將來用 javac 進行編譯的時候,最終會生成多個 .class 文件,每一個類對應個 .class 文件。運行時只要運行對應的 .class 文件就可以了,這時 .java 文件就顯得沒什么用了( 運行時不需要 ),那還管它叫什么名字。
但是當你的類被 public 修飾時,此時文件名必須和該類保持一致(例如 public class A{} 只能放在 A.java 文件中,不然在用 javac 編譯時會提示錯誤:類 A 是公共的,應在名為 A.java 的文件中聲明)。也就是說在同一個 .java 文件中,不應該出現2個或2個以上的 public class 。
如果有一個public class類,就應該讓文件名和此類名相同;那如果沒有呢,即所有的 class 都沒有修飾符,那么可以給該文件隨便起名字,甚至可以不和任意一個類同名,哪怕是漢字名稱都可以,但是后綴還是要有.java 的 。
注:有很多初學者 ( 我也是 ) 可能會認為文件名應該也和 main 方法所在類有關系,其實不然。main 方法只是程序的一個入口,老師講“一個程序只能有一個入口”,好象是在說只能有一個 main 方法,其實,只要你高興,就可以在所有類里都寫上 main 方法,給程序提供N多個入口,但是最后你運行程序的時候也只能從其中的一個入口進去,這就是 main 的作用( 程序入口 )。(這也就是為什么你會發現,程序員在做單元測試時,會往自己做的很多類里面添加 main 方法,因為他要為自己做的東西添加運行入口,從而能方便測試。)
新聞熱點
疑難解答