編譯單元可以不帶public類
A. 為什麼java文件中只能含有一個Public類
每個編譯單元都有單一的公共介面,用public類來表現。該介面可以按要求包含眾多的支持包訪問許可權的類。如果在某個編譯單元內有一個以上的public類,編譯器就會給出錯誤信息。
一個Java源文件中可以有多個類,但只能有一個public的類,並且public的類名必須與文件名相一致。一個文件中可以只有非public類,如果只有一個非public類,此類可以跟文件名不同。
(1)編譯單元可以不帶public類擴展閱讀:
JAVA類中主要包含屬性、方法、構造方法、塊以及內部類。
屬性用來定義對象的數據;
方法用來定義對象的行為;
構造方法可以用來創建對象;
塊能夠用來在類載入時執行操作或者在每次實例化前執行通用操作;
內部類作為類的一個成員存在,能夠訪問外部類的屬性和方法。
類是對象的模板,使用類往往都需要首先對類進行實例化,即創建對象。要創建對象必須使用new關鍵字調用構造方法(constructor)才能完成,構造方法中往往對屬性進行實例化,也可以實現其他必要的功能,如讀取屬性文件等。
構造方法的作用是用來創建對象,使用new關鍵字調用。構造方法的名字必須與類的名字相同,並且大小寫敏感,同時構造方法不能聲明返回值類型,可以使用任意一種訪問修飾符,但是不能使用其他修飾符進行修飾,如static、final、abstract等修飾符都可以修飾構造方法。
B. JAVA 關於封裝的這個問題 為什麼會報錯
首先,建議題主直接把代碼貼出來;
其次,一個".java"源文件中可以有多個類,但只能有一個public的類,並且public的類名必須與文件名相一致。一個文件中可以只有非public類,如果只有一個非public類,此類可以跟文件名不同。
在java編程思想(第四版)一書中有這樣3段話(6.4 類的訪問許可權):
1.每個編譯單元(文件)都只能有一個public類,這表示,每個編譯單元都有單一的公共介面,用public類來表現。該介面可以按要求包含眾多的支持包訪問許可權的類。如果在某個編譯單元內有一個以上的public類,編譯器就會給出錯誤信息。
2.public類的名稱必須完全與含有該編譯單元的文件名相同,包含大小寫。如果不匹配,同樣將得到編譯錯誤。
3.雖然不是很常用,但編譯單元內完全不帶public類也是可能的。在這種情況下,可以隨意對文件命名。
C. 一個java源文件中可以有多個類,但只能有一個類是public的嗎
是的。
java程序是從一個public類的main函數開始執行的,就像C程序是從main()函數開始執行一樣。只能有一個public是為了給類裝載器提供方便。 一個public只能定義在以它的類名為文件名的文件中。
D. 程序中的主類如果不用public修飾,編譯能通過嗎
可以的。有關類的public修飾,有一個規定,就是一個.java文件裡面,最多隻能有一個public類(當然可以少於一個,就是0個了),否則編譯不通過。
另外一個約定是,運行入口的main方法必須放到與文件名同名的類裡面,比如T.java,裡面main方法只能放到class T裡面,否則不會被執行,但這只是約定,不會影響編譯,也就是說你放到別的類,比如class T2裡面也可以,但是不會通過java T命令來執行。
E. 淺談為什麼一個java源文件中只能有一個public類
1、每個編譯單元(文件)只能有一個public 類。這么做的意思是,每個編
譯單元只能有一個公開的介面,而這個介面就由其public 類來表示。
你可以根據需要,往這個文件裡面添加任意多個提供輔助功能的package 許可權的類。但是如果這個編譯單元裡面有兩個或兩個以上的public 類的話,編譯器就會報錯。
2. public 類的名字必須和這個編譯單元的文件名完全相同,包括大小
寫。所以對Widget 類,文件名必須是Widget.java,不能是widget.java 或WIDGET.java。如果你不遵守,編譯器又要報錯
了。
3. 編譯單元裡面可以沒有public 類,雖然這種情況不常見,但卻是可以
的。這時,你就能隨意為文件起名字了。