本節(jié)內(nèi)容介紹包的使用妹蔽,主要是 package 語(yǔ)句。?
? 1)隨著代碼的大量增加,程序員寫的.java 源文件以及編譯產(chǎn)生的.class 字節(jié)碼文件會(huì)大量的增加可都。如果任由這種情況發(fā)生的話缓待,無(wú)論是查詢還是管理都會(huì)非常的不方便。為了解決這方面的問(wèn)題渠牲,Java 提供了“包”來(lái)幫助我們組織和管理類旋炒。
??在操作系統(tǒng)中,如果有大量的文件签杈,為了方便管理瘫镇,我們往往會(huì)按照某種規(guī)則,創(chuàng)建結(jié)構(gòu)合理的文件夾結(jié)構(gòu)答姥。例如铣除,如果有大量的 文件,用戶可以把這些文件按照excel鹦付、 word尚粘、ppt等,創(chuàng)建相應(yīng)的文件夾敲长,分門別類的進(jìn)行管理郎嫁。 類似的,在 Java 中祈噪,為了更好的管理大量的類泽铛,引入了“包”的概念。 使用 package 語(yǔ)句可以用來(lái)將一個(gè)特定的類放入包中辑鲤。要注意的是盔腔,如果要使用 package 語(yǔ)句,則這個(gè)語(yǔ)句必須作為.java 文件的第一個(gè)語(yǔ)句遂填,并寫在任何類的外面铲觉。例如,對(duì)我們之前寫的 HelloWorld 類放入 learn.java 包吓坚,則代碼如下:
package?learn.java;
public class HelloWorld{
public static void main(String args[]){
System.out.print("Hello World");
}
}
上面的這段代碼撵幽,就把 HelloWorld 類放在了 learn.java包下。要注意的是礁击,在加包之后盐杂,使用java命令去運(yùn)行?HelloWorld 類時(shí)必須加上包名作為前綴,因此完整的寫法應(yīng)當(dāng)是: learn.java.HelloWorld哆窿。這種在類名前面加上包名的寫法稱為類的全限定名链烈。
首先我們使用編譯命令編譯HelloWorld.java文件。編譯完成后生成HelloWorld.class文件挚躯。之后直接運(yùn)行.class文件强衡,會(huì)產(chǎn)生一個(gè)錯(cuò)誤:
出現(xiàn)這個(gè)錯(cuò)誤的原因顯然跟我們剛剛給 HelloWorld 加包有關(guān)。 在加包之后码荔,使用 HelloWorld 類時(shí)漩勤,必須使用全限定名運(yùn)行 HelloWorld 的 class 文件感挥。 即,命令必須是 java learn.java.HelloWorld 但是這樣運(yùn)行越败,依然會(huì)提示錯(cuò)誤:
這個(gè)錯(cuò)誤的原因在于触幼,包結(jié)構(gòu)必須和硬盤上的文件夾結(jié)構(gòu)一致。也就是說(shuō)究飞,在上述例子中置谦,HelloWorld.class 文件,必須放在類路徑下的 learn/ java/目錄 下亿傅。
? 在存放HelloWorld.java文件夾下媒峡,建立對(duì)應(yīng)的包名目錄結(jié)構(gòu),并將.class文件移動(dòng)到特定文件夾下袱蜡,在我的文件目錄中丝蹭,我需要在D:\core java\test文件夾下再新建對(duì)應(yīng)的包的目錄結(jié)構(gòu),即D:\core java\test\learn\java 坪蚁。此時(shí)我的HelloWorld.class的存放地址為D:\core java\test\learn\java\HelloWorld.class
? ? ? ? ? ? ? ? ? ? ?此時(shí)運(yùn)行java learn.java.HelloWorld命令才能正確執(zhí)行奔穿,結(jié)果如下:
使用包的主要目的是為了避免類名沖突。例如敏晤,假設(shè)有兩個(gè)程序員不約而同的都使用 HelloWorld 作為類名贱田。如果這兩個(gè)類都不使用包的話,一方面嘴脾,兩個(gè)類的類名相同男摧,因此在 使用上會(huì)產(chǎn)生歧義。另一方面译打,在把兩個(gè)程序員寫完的.class 字節(jié)碼文件放在一起運(yùn)行的時(shí) 候耗拓,在同一個(gè)文件夾下會(huì)有兩個(gè)同名的字節(jié)碼文件,從而產(chǎn)生文件沖突奏司。而如果這兩個(gè)程序 員使用不同的包 p1 和 p2乔询,一方面生成的 HelloWorld.class 字節(jié)碼文件一個(gè)放在 p1 目錄下, 另一個(gè)放在 p2 目錄下韵洋,不會(huì)有文件名的沖突竿刁。另一方面,全限定名不同搪缨,在使用這兩個(gè)類 時(shí)食拜,一個(gè)被稱為 p1.HelloWorld,另一個(gè)被稱為 p2.HelloWorld副编,從而避免了類名的沖突负甸。