以下觀點(diǎn)是自己對(duì)同名原因的理解,希望行家不吝賜教!
? 在討論這個(gè)問(wèn)題之前,我想請(qǐng)大家思考一個(gè)問(wèn)題。將聲明的一個(gè)類用public修飾的意義在哪里?我相信很多朋友會(huì)想到訪問(wèn)、調(diào)用權(quán)限聲明,public、private等是對(duì)其他類能否調(diào)用該類的明確界定,其作用是不言而喻的。那么這些與同名問(wèn)題有什么關(guān)聯(lián)呢?
? ?未限定聲明的類可在同一包中被調(diào)用,java程序編譯時(shí)會(huì)將源文件生成以各自類命名的.class文件,因此在同一包中不能定義相同名稱的類,否則會(huì)引發(fā)沖突,系統(tǒng)會(huì)報(bào)錯(cuò)。而聲明為public的類可以被包外的類引用,只需要import 包名 文件名.java,就可以使用該類。這里我要指出:編譯器在執(zhí)行這條語(yǔ)句時(shí)會(huì)根據(jù)路徑反向查找,而此時(shí)的文件名能幫助編譯器快速定位所編譯類的位置。想要快速實(shí)現(xiàn)這一過(guò)程,就需要遵循規(guī)則,而將聲明的類與文件名同名,能很好地解決這一問(wèn)題。同時(shí),因?yàn)槲聪薅暶鞯念惒淮嬖诎庹{(diào)用,所以其命名也能很隨意,因?yàn)橄到y(tǒng)不需要花功夫查找它,只是在包內(nèi)使用時(shí)進(jìn)行遍歷。
? 其實(shí),我們可以把同名理解為規(guī)則,編譯單元將public修飾符看做是一個(gè)java的公開(kāi)接口,在對(duì)一個(gè)java程序編譯前,會(huì)先檢驗(yàn)該文件是否符合規(guī)范(規(guī)則是我只能接收一個(gè)或沒(méi)有public修飾的類,其他的都不準(zhǔn)通過(guò)!!!)當(dāng)然,若編譯器檢查其符合規(guī)范且有public聲明,為了提高效率,讓編程員把該文件命名為與pubic 類同名的文件再好不過(guò)。
參考:
一個(gè)java源文件為什么只能有一個(gè)public類呢?當(dāng)這個(gè)類被修飾public的話,為什么源文件名必須要與類名相同呢?