簡體   English   中英

源文件不能有多個公共類

[英]source file can't have more than one public class

我們只能在源文件中聲明一個公共文件,文件名必須與公共類名相匹配

這個限制是否有任何理由......

嗯,這不是Java中的強制限制。 這是Java語言規范提到的一個選項 JLS第7.6節開始

當包存儲在文件系統(第7.2.1節)中時,如果在由類型名稱加上名稱的文件中找不到類型,主機系統可以選擇強制執行編譯時錯誤的限制。如果滿足以下任一條件,則為擴展名(例如.java或.jav):

  • 該類型由聲明類型的包的其他編譯單元中的代碼引用。
  • 該類型被聲明為public(因此可以從其他包中的代碼訪問)。

這種限制意味着每個編譯單元最多只能有一個這樣的類型。 這種限制使得Java編程語言的編譯器或Java虛擬機的實現很容易在包中找到命名類; 例如,公共類型wet.sprocket.Toad的源代碼可以在wet / sprocket目錄中的Toad.java文件中找到,相應的目標代碼可以在同一目錄中的Toad.class文件中找到。

但基本上它是鼓勵你讓你的源更容易導航。 如果您知道公共類的名稱,通常很容易找到它的源代碼。

是的,它是Java語言的規范......

原因是,這是慣例。 類加載器還需要特定文件中的類。 您可以編寫自己的類加載器以避免此限制,但沒有充分的理由這樣做。 每個看你代碼的人都會感到困惑。 ;)

但是,您可以通過創建內部類在一個文件中創建“多個”類。 我知道,它不一樣,但通常你應該考慮比一個文件中只有一個類更重要的事情。

只記得那個類是公開的,其他主要文件不公開

它就在那里,編譯器可以找到依賴類的源代碼。

@saravanan。 我已經執行了一些簡單的程序,這些程序顯示只有一個默認類(即沒有訪問說明符的類),當使用默認類名保存文件名時,main方法在java中運行良好。

為了添加使用公共類名命名文件的原因,在文檔中我詳細介紹了JVM查找公共類的狀態(因為沒有限制,可以從任何地方訪問)並且還查找公共類中的public static void main()。

這個公共類充當初始類,從那里開始java應用程序(程序)的JVM實例。所以當你在程序中提供多個公共類時,編譯器本身會通過拋出錯誤來阻止你。

這是因為稍后您不能將JVM與哪個類作為其初始類混淆,因為只有一個帶有public static void main(String args[])public static void main(String args[])類是JVM的初始類。

希望我幫助您更好地理解JAVA編程命名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM