java文件名為什么要和public類名一致?


test.java下public class classA

public class classA{ public static void main(String[] args){ System.out.println("public  classA main..."); } }

 

test.java下public class classA + class test

public class classA{ public static void main(String[] args){ System.out.println("public classA main..."); } } class test{ public static void main(String[] args){ System.out.println("class test main..."); } }

 

test.java下public class classA + public class test

public class test{ public static void main(String[] args){ System.out.println("public classA main..."); } } public class classA{ public static void main(String[] args){ System.out.println("class test main..."); } }

test.java 下 class classA, class classB

class classA{ public static void main(String[] args){ System.out.println("classA main..."); } } class classB{ public static void main(String[] args){ System.out.println("classB main..."); } }

test.java 下 class test, class classB

class test{ public static void main(String[] args){ System.out.println("test main..."); } } class classB{ public static void main(String[] args){ System.out.println("classB main..."); } }

 

現象:只要代碼中有public類就必須和文件名一致,否則編譯報錯,但是沒有public類則文件名和類名無所謂。

 

規定:編譯器決定

(《java編程思想》):當編寫一個java源代碼文件時,此文件通常被稱為編譯單元(有時也被稱為轉譯單元),每個編譯單元都必須有一個后綴名.java,而在編譯單元內則可以有一個public類,該類的名稱必須與文件的名稱相同(包括大小寫,但不包括文件的后綴名.java)。每個編譯單元只能有一個public類,否則編譯器就不會接受。如果在該編譯單元之中還有額外的類的話,那么在包之外的世界是無法看見這些類的,這是因為它們不是public類,而且它們主要用來為主public類提供支持。

每個編譯單元(文件)只能有一個public類,意思是,每個編譯單元只能有一個公開接口,而這個接口就由其public類來表示。(軟件架構設計和安全性設計上得出的結論,或者說java的設計者們從這方面的考慮,或者真是一個規范?)

(參考:www.cnblogs.com/fuhongliang/p/4304477.html

 

優點:

(1)防止.class文件覆蓋,A.java下public class B若不記住這種關系,則可能再寫出B.java下public class B,編譯后只會留有一份B.class

(2)被項目中其他任何類引用時,只需在使用它前import所對應的class文件即可,將類名與文件名一一對應就可以方便虛擬機在相應的路徑(包中)中找到相應的類的信息,否則很難找到需要的類,開銷也很大。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM