




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1面向WEB的JAVA語言程序設(shè)計2013年4月23日 第3章 包“包”指的是一組提供訪問保護和命名空間管理的相關(guān)的類型。注意這里的“類型(types)”指的是類、接口、枚舉以及注解類型。枚舉和注解類型分別是特殊的類和接口,所以在本章中,涉及到“類型”時簡單地指類和接口。本章講解如何將類和接口封裝到一個包中、如何使用包中的類、以及如何組織自己的文件系統(tǒng)使得編譯器能夠找到源文件。利用面向?qū)ο蠹夹g(shù)開發(fā)一個實際的系統(tǒng)時,通常需要定義許多類共同工作,為了更好地管理這些類,Java中引入了包的概念。就像文件夾(目錄)把各種文件組織在一起,使硬盤更清晰、有條理一樣,Java中的包把各種類組織在一起,使得程
2、序功能清楚、結(jié)構(gòu)分明。特別地,使用包可以有利于實現(xiàn)不同程序間類的復用。包是一種松散的類的集合。一般不要求處于同一個包中的類有明確的相互關(guān)系,如包含、繼承等,但是由于同一包中的類在缺省情況下可以互相訪問,所以為了方便編程和管理,通常把需要在一起工作的類放在一個包里。例如前面使用過的類PhoneCard、Number-PhoneCard和D200-Card等就可以放在同一個包中。3.1 使用包試想一下:如果一個具有100多人的單位,沒有任何的部門和科室,管理一定會陷于混亂。同樣,當一個程序中包含100多個類時,如果不將它們按其用途分門別類組織在不同的文件夾中,那么開發(fā)工作也將一片混亂。為了使得各種
3、類型易于查找和使用,避免命名沖突,并控制訪問,程序員將一組相關(guān)的類型封裝到包(package)中。3.2 創(chuàng)建包要創(chuàng)建一個包,需要為包選擇一個名稱,并將一個package語句和包的名稱放在每一個想要放到包中的源文件(包含各種類型:類、接口、枚舉和注解類型)的頂部。其中package為關(guān)鍵字。所有的包名都是小寫。3.2.1 創(chuàng)建包的語句使用含有關(guān)鍵字package的語句來創(chuàng)建包。例如,在上一節(jié)創(chuàng)建的各種與圖形相關(guān)的類,都放到同一個包graphics中,那么需要在每一個源文件中的頂部包含以下代碼:package graphics;3.2.2 命名包在全世界同時會有很多的程序員都使用Java程序設(shè)計
4、語言來編寫類和接口,所以很有可能許多程序員將使用相同的名稱來命名不同的類型。實際上,在上一節(jié)的例子就是這樣的:作者定義了一個Rectangle類,同時在java.awt包中已經(jīng)有了一個Rectangle類。3.2.3 包命名慣例包名使用小寫字母,以避免與類名或接口名沖突。對公司來說,使用其顛倒的Internet域名來開始其包名。在一個公司內(nèi)部發(fā)生的命名沖突,需要按照該公司的規(guī)定來處理。 在缺省情況下,系統(tǒng)會為每一個 .java源文件創(chuàng)建一個無名包,該 .java文件中定義的所有類都隸屬于這個無名包,它們之間可以相互引用非private的域或方法。但是由于這個無名包是沒有名字的,所以它不能被其他
5、包所引用,即無名包中的類不能被其他包中的類所引用和復用。為了解決這個問題,可以創(chuàng)建有名字的包。 創(chuàng)建包的語句需要使用關(guān)鍵字package,而且應(yīng)該是整個 .java文件的第一個語句。 package 包名; 利用這個語句就可以創(chuàng)建一個具有指定名字的包,當前 .java文件中的所有類都被放在這個包中。例如下面的語句是合法的創(chuàng)建包的語句: package CardClasses ;package CardSystem . CardClasses ; 實際上,創(chuàng)建包就是在當前文件夾下創(chuàng)建一個子文件夾,以便存放這個包中包含的所有類的 .class文件。上面的第二個創(chuàng)建包的語句中的符號“.”代表了目錄分
6、隔符,即這個語句創(chuàng)建了兩個文件夾。第一個是當前文件夾下的子文件夾CardSystem;第二個是CardSystem下的子文件夾CardClasses,當前包中的所有類就存放在這個文件夾里。下面的例子創(chuàng)建了一個包,其中包含了前面使用過的PhoneCard類和它的子類:Number-PhoneCard,D200-Card。package CardClasses; /創(chuàng)建包abstract class PhoneCarddouble balance;abstract boolean performDial( );double getBalance( )return balance; abstract
7、 class Number-PhoneCard extends PhoneCardlong cardNumber;int password;String connectNumber;boolean connected;boolean performConnection(long cn,int pw)if(cn = cardNumber & pw = password)connected = true;return true;elsereturn false;class D200-Card extends Number-PhoneCarddouble additoryFee;double bal
8、ance;boolean performDial( )if( balance (0.5 + additoryFee )balance -= (0.5 + additoryFee);return true;elsereturn false; 上述程序片斷將在當前目錄下創(chuàng)建一個子目錄CardClasses,并認為程序文件中定義的三個類PhoneCard,Number-PhoneCard和D200-Card產(chǎn)生的三個對應(yīng)的字節(jié)碼文件PhoneCard.class,Number-PhoneCard.class和D200-Card.class都放在這個子目錄中。如果同一個程序文件中還定義了其他的類,則它
9、們也將被視為在同一個包中。 3.3 使用包中的成員 組成包的類型稱為“包的成員”,包括類、接口、枚舉和注解類型,都是包的組成成員。從一個包的外部使用一個public包成員,必須滿足以下條件之一:通過全限定名指向包的成員。導入包成員。導入成員所在的整個包。3.3.1 通過全限定名引用包成員如果所編寫的代碼與要引用的成員在同一個包中,或者要引用的成員已經(jīng)導入,可以使用包成員的簡單名稱。3.3.2 導入包中的成員要導入一個指定的成員到當前文件中,需要在文件的開始放置一個import語句。import語句位于package語句之后,任何類型的定義之前。3.3.3 導入整個包有時候,在編寫程序時,需要用
10、到某些包中很多的類型,這時可以不用一個一個類型地導入,而要使用帶有通配字符“*”(星號)的import語句導入一個特定包中包含的所有類型,如下面的代碼所示。import graphics.*;3.3.4 包的層級表面看來包是有層級的,但是它們在實際上沒有這樣的層級關(guān)系。例如,Java API包含有一個java.awt包,一個java.awt.color包,一個java.awt.font包,以及許多其他的以java.awt開頭的包。但是,java.awt.color包、java.awt.font包和其他java.awt.xxxx包并不包含在java.awt包中。前綴java.awt(Java 抽
11、象窗口工具箱)被用于許多與桌面程序設(shè)計相關(guān)的包,以使其關(guān)系更加明顯,但是并不表示它們有內(nèi)含的關(guān)系。3.3.5 包成員名稱沖突如果一個包中的一個成員與另外一個包中的一個成員具有相同的名稱,那么必須通過全限定名使用每一個成員。例如,在graphics包中定義一個名為Rectangle的類。在java.awt包中也包含一個Rectangle類。如果graphics和java.awt包都被導入到同一個文件中,那么象下面這樣的代碼就是不確定的:Rectangle rect ;3.3.6 靜態(tài)導入語句有時需要頻繁的訪問某個(或某些)類中的static final字段(常量)和靜態(tài)方法。反復地將這些類的名稱
12、作為前綴會導致代碼混亂?!办o態(tài)導入”語句提供了導入常量和靜態(tài)方法的一種方式,這樣就不需要使用它們的類名作為前綴。 將類組織成包的目的是為了更好地利用包中的類。通常一個類只能引用與它在同一個包中的類。如果需要使用其他包中的public類,則可以使用如下的幾種方法。1. 使用包名、類名前綴 一個類要引用其他的類,無非是繼承這個類或創(chuàng)建這個類的對象并使用它的域、調(diào)用它的方法。對于同一包中的其他類,只需在要使用的屬性或方法名前加上類名作為前綴即可;對于其他包中的類,則需要在類名前綴的前面再加上包名前綴。例如:CardClasses.D200-Card my200 = new CardClasses.D
13、200- Card(12345678,1234);System.out.println(my200.toString( ); 2. 加載需要使用的類 如果使用上面的方法,每當類名D200-Card出現(xiàn)時都必須附加一個包名的前綴,編程中使用起來非常麻煩。一個解決的方法是在程序文件的開始部分利用import語句將需要使用的整個類加載到當前程序中,這樣在程序中需要引用這個類的地方就不需要再使用包名作為前綴。例如上面的語句在程序開始處增加了:import CardClasses. D200-Card;/ 在程序開始加載其他包的類語句之后,就可以直接寫成:D200-Cardmy200 = new D20
14、0-Card(12345678,1234); 3. 加載整個包 上面的方法利用import語句加載了其他包中的一個類。有些情況下可以直接利用import語句引入整個包,此時這個包中的所有類都會被加載到當前程序中。加載整個包的import語句可以寫為: import CardClasses . *; import java . awt . * ; 上面的第二個語句在前面的例子中已多次使用,它的作用是把Java系統(tǒng)有關(guān)抽象窗口工具的包(系統(tǒng)類庫)加載到當前程序中。與加載單個類相同,加載整個包后,凡是用這個包中的類,都不需要再使用包名前綴。4. CLASSPATH 包是一種組織代碼的有效手段,包名實
15、際上就指出了程序中需要使用的 . class文件的所在之處。另一個能指明 .class文件目錄所在的結(jié)構(gòu)是環(huán)境變量CLASSPATH。CLASSPATH類似于DOS操作系統(tǒng)中的PATH,它指明了所有缺省的類字節(jié)碼文件路徑,當一個程序找不到它所需使用的其他類的 .class文件時,系統(tǒng)會自動到CLASSPATH環(huán)境變量所指明的路徑中去尋找。 設(shè)置CLASSPATH環(huán)境變量可以通過編輯系統(tǒng)的AUTOEXEC.BAT文件,或使用相關(guān)的DOS命令。例如下面的語句:SET CLASSPATH .; c:jdk1.2lib; c:jdk1.2lib.classes.zip;將CLASSPATH設(shè)置為當前目
16、錄:c:jdk1.2lib和c:jdk1.2libclasses.zip。 對于Java Application程序,還可以通過為Java解釋器設(shè)置參數(shù)來指定類文件路徑。例如,對于JDK中的Java解釋器java .exe,有開關(guān)參數(shù) -classpath;對于Visual J+中的Java解釋器jview .exe,有參數(shù) -cp。假設(shè)當需要解釋執(zhí)行的 test.class文件不在當前目錄而在C盤的TEMP目錄下時,可以使用如下的命令行語句: java test -classpath c:temp (回車) 來運行這個程序。 3.4 管理源文件和class類文件Java平臺的許多實現(xiàn)依賴于分組的文件系統(tǒng)來管理源文件和class文件(雖然Java語言規(guī)范對此沒有要求)。例如,包名對應(yīng)著系統(tǒng)中實際的目錄名。包括在安裝JDK時,所生成的目錄也是與類所屬
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時供應(yīng)合同范本
- 企業(yè)修路合同范本
- 2025年衡水駕駛員貨運從業(yè)資格證模擬考試題
- 中介交易服務(wù)合同范本
- 會展項目服務(wù)合同范例
- 2025年昆明道路貨運從業(yè)資格證模擬考試官方題下載
- 修車配件合同范本
- 出租合同范本版
- 農(nóng)村水源地租賃合同范本
- 與演員合作合同范本
- 三年級體育下冊全冊教案
- 2024年八年級語文下冊《經(jīng)典常談》第一章《說文解字》練習題卷附答案
- (研究生)商業(yè)倫理與會計職業(yè)道德ppt教學課件(完整版)
- 山西省煤炭運銷集團有限公司王家?guī)X煤礦井筒工程施工組織設(shè)計
- 三年級數(shù)學下冊單元計劃【9個單元全】
- 鋼筋工程隱蔽檢查驗收記錄填寫實例
- 火力發(fā)電廠水汽化學監(jiān)督導則
- 二年級科學上冊期末考試質(zhì)量分析
- 相聲《治病》
- 行動學習-組織能力提升新境界培訓課件.ppt
- QTD01鋼質(zhì)無縫氣瓶檢驗工藝指導書課件
評論
0/150
提交評論