因為: Java是被解釋執行的。它在運行時並不是將所有的class檔案全都放到記憶體中。而是在遇到import的時候才去對應的檔案目錄找對應的class檔。
對於一個public類,它是可以被專案中任何一個類別所引用的,只需在使用它前import一下它所對應的class檔案即可。將類別名稱與檔案名稱一一對應就可以方便虛擬機器 在對應的路徑(套件名稱)中找到對應的類別的資訊。如果不這麼做的話,就很難去找,開銷也會很大。
總結:
一個原始檔(.java)裡,沒有用public修飾的類別也可以跟檔名一致。
一個原始檔中可以存在類別名稱和檔案名稱不一致的情況,但不能用public修飾.
如果一個包內不存在public修飾的類別的話,那麼我想這個包我覺得沒有什麼意義,因為不能為」客戶程式設計師」提供介面,即使沒有用public修飾的類別裡面含有public修飾了的靜態方法,」客戶程式設計師」也沒有權限存取。
原始檔沒有用public修飾的類別主要是為public修飾的類別」支撐」。
最好不要在一個.java的來源檔案裡寫很多的類別.
main方法不一定要在public修飾了的類別下才能執行。但是main方法必須是public修飾的
《Thinking in Java》解釋:
为Java创建一个源码文件的时候,它通常叫作一个“编辑单元”(有时也叫作“翻译单元”)。每个编译单元都必须有一个以.java结尾 的名字。而且在编译单元的内部,可以有一个公共(public)类,它必须拥有与文件相同的名字(包括大小写形式,但排除.java文件扩 展名)。如果不这样做,编译器就会报告出错。每个编译单元内都只能有一个 public类(同样地,否则编译器会报告出错)。那个编译 单元剩下的类(如果有的话)可在那个包外面的世界面前隐藏起来,因为它们并非“公共”的(非public),而且它们由用于主public 类的“支撑”类组成。编译一个.java文件时,我们会获得一个名字完全相同的输出文件;但对于.java文件中的每个类,它们都有一个. class扩展名。因此,我们最终从少量的.java文件里有可能获得数量众多的.class文件。如以前用一种汇编语言写过程序,那么可能已 习惯编译器先分割出一种过渡形式(通常是一个.obj文件),再用一个链接器将其与其他东西封装到一起(生成一个可执行文件),或 者与一个库封装到一起(生成一个库)。但那并不是Java的工作方式。一个有效的程序就是一系列.class文件,它们可以封装和压缩到 一个JAR文件里(使用Java1.1提供的jar工具)。Java解释器负责对这些文件的寻找、装载和解释(注释①)。 ①:Java并没有强制一定要使用解释器。一些固有代码的Java编译器可生成单独的可执行文件。
以上是java檔名為什麼要與類別名相同的詳細內容。更多資訊請關注PHP中文網其他相關文章!