IBM公司Java培訓(xùn)完整版課件_第1頁
IBM公司Java培訓(xùn)完整版課件_第2頁
IBM公司Java培訓(xùn)完整版課件_第3頁
IBM公司Java培訓(xùn)完整版課件_第4頁
IBM公司Java培訓(xùn)完整版課件_第5頁
已閱讀5頁,還剩303頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1大家好1大家好第一章Java語言概述華中科技大學(xué)IBM技術(shù)中心2008第一章Java語言概述華中科技大學(xué)IBM技術(shù)中心200833445566Java程序相關(guān)問題——Java虛擬機(jī)Java虛擬機(jī)——在真實(shí)機(jī)器中用軟件模擬實(shí)現(xiàn)的一種抽象的機(jī)器。(Java虛擬機(jī)規(guī)范)Java虛擬機(jī)主要由五個(gè)部分組成:指令系統(tǒng)、寄存器、棧、存儲(chǔ)區(qū)、碎片回收區(qū)解釋和執(zhí)行Java程序編譯后產(chǎn)生的字節(jié)碼

7Java程序相關(guān)問題——Java虛擬機(jī)Java虛擬機(jī)——在真Java程序相關(guān)問題——JavaAPIJavaAPI是Java系統(tǒng)提供的預(yù)先定義好的軟件組件的集合,它們提供了許多可供程序員調(diào)用的常用功能豐富的API為程序員提供了極大的方便,但也是學(xué)習(xí)的難點(diǎn)要學(xué)會(huì)使用JavaAPI手冊(cè)(TheJava

2PlatformAPISpecification)

8Java程序相關(guān)問題——JavaAPIJavaAPI是JJava程序相關(guān)問題——Java程序的運(yùn)行機(jī)制操作系統(tǒng)源代碼可執(zhí)行代碼目標(biāo)碼編譯連接運(yùn)行源代碼字節(jié)碼編譯解釋執(zhí)行Java解釋器傳統(tǒng)語言的運(yùn)行機(jī)制Java語言的運(yùn)行機(jī)制9Java程序相關(guān)問題——Java程序的運(yùn)行機(jī)制操作系統(tǒng)源代Java程序相關(guān)問題——Java程序類型

Java應(yīng)用程序(JavaApplication)是獨(dú)立完整的程序在命令行調(diào)用獨(dú)立的解釋器軟件即可運(yùn)行主類必須有main方法,這也是程序的入口Java小程序JavaApplet——是指在客戶端運(yùn)行的Java小程序,一般來說客戶端是指用戶所使用的瀏覽器

JavaServlet——是在服務(wù)器端執(zhí)行的Java小程序,為了能夠支持Servlet的運(yùn)行,服務(wù)器端必須安裝包含Java虛擬機(jī)的服務(wù)器軟件,這種能夠支持服務(wù)端小程序的服務(wù)器一般被稱為應(yīng)用服務(wù)器10Java程序相關(guān)問題——Java程序類型Java應(yīng)用程序(Java開發(fā)環(huán)境JDK/J2SDK(JavaDeveloperKit)JDK1.02JDK1.1.xJDK1.2/J2SDK1.3/J2SDK1.4/JDK5.0(J2SDK1.5)Java集成開發(fā)環(huán)境(IDE)NetBeansJBuilderEclipseJCreatorForteforJavaVisualJ++WSAD……11Java開發(fā)環(huán)境JDK/J2SDK(JavaDevelopJDK的安裝與設(shè)置從可以下載相關(guān)版本的JDK(本課程采用J2SDK1.3以上版本)在Windows平臺(tái)上運(yùn)行安裝程序,以安裝JDK設(shè)置PATH(文件路徑)參數(shù)。由于JDK提供的實(shí)用程序都在安裝目錄下的子目錄bin下,為了能在任何目錄下直接使用文件名調(diào)用這些程序,必須設(shè)置操作系統(tǒng)的文件路徑參數(shù)

12JDK的安裝與設(shè)置從可以下載相關(guān)版本的JDK(本課程采用J環(huán)境設(shè)置在Windows環(huán)境下,為了快速進(jìn)入指定目錄的命令行窗口,可在注冊(cè)表中增加項(xiàng)目:[HKEY_CLASSES_ROOT\Directory\shell\進(jìn)入命令行\(zhòng)command]默認(rèn)值設(shè)為:cmd/k"cd%1"13環(huán)境設(shè)置在Windows環(huán)境下,為了快速進(jìn)入指定目錄的命令行JDK的目錄結(jié)構(gòu)bin目錄中包含了所有JDK5.0提供的實(shí)用程序demo目錄中包含了JDK5.0自帶的實(shí)例程序inculde目錄中包含了一些支持Javanative方法的C\C++頭文件jre目錄中包含了Java運(yùn)行環(huán)境所需的所有文件,這個(gè)目錄中所包含的java運(yùn)行環(huán)境是JDK私有的,它只為JDK的實(shí)用程序提供支持lib目錄中包含了Java開發(fā)環(huán)境所需的庫文件,它們以jar文件的形式保存sample目錄中包含的是體現(xiàn)JDK5.0新特性的一些例程14JDK的目錄結(jié)構(gòu)bin目錄中包含了所有JDK5.0提供的實(shí)用JDK實(shí)用程序簡介javac:Java編譯器,將Java源代碼編譯為字節(jié)碼;java:Java解釋器,用來解釋執(zhí)行Java程序的字節(jié)碼文件;appletviewer(小程序?yàn)g覽器):一種執(zhí)行HTML文件上的Java小程序類的Java瀏覽器;javadoc:根據(jù)Java源代碼與其說明語句生成的HTML文檔;jdb:Java調(diào)試器,可以逐行地執(zhí)行程序、設(shè)置斷點(diǎn)和檢查變量;javah:產(chǎn)生可以調(diào)用Java過程的C過程,或建立能被Java程序調(diào)用的C過程的頭文件;javap:Java反匯編器,顯示編譯類文件中的可訪問功能和數(shù)據(jù),同時(shí)顯示字節(jié)代碼含義。15JDK實(shí)用程序簡介javac:Java編譯器,將Java源代Java程序的開發(fā)過程

編輯源代碼編譯源代碼文件運(yùn)行程序16Java程序的開發(fā)過程16Java程序的開發(fā)過程——編輯源代碼一般情況下,我們可以使用系統(tǒng)平臺(tái)下的任何文本編輯器進(jìn)行源代碼的編輯,在Windows平臺(tái)下常用的是Window系統(tǒng)自帶的“記事本”程序或“寫字板”程序Java源碼大小寫敏感Java源碼文件的擴(kuò)展名:.javaJava源程序文件也不能隨意命名,其文件名必須與程序中主類的類名完全相同,包括大小寫在內(nèi)publicclassMyFirstJavaApp{publicstaticvoidmain(String[]args){System.out.println(“ThisisMyFirstJavaApplication!”);}}17Java程序的開發(fā)過程——編輯源代碼一般情況下,我們可以使用Java程序的開發(fā)過程——編譯源代碼使用JDK實(shí)用程序javac對(duì)源代碼文件進(jìn)行編譯C:\MyJava>javacMyFirstJavaApp.java如果系統(tǒng)提示符再次出現(xiàn)并且沒有任何消息產(chǎn)生,那么編譯便成功了如果有系統(tǒng)報(bào)錯(cuò)消息產(chǎn)生,則表示程序編譯出錯(cuò),程序員必須閱讀報(bào)錯(cuò)信息,并根據(jù)這些信息對(duì)程序進(jìn)行修改程序成功編譯后,在與源代碼文件同一目錄下會(huì)生成一個(gè)新的文件,其文件名與源代碼文件名相同,擴(kuò)展名為“.class”。這個(gè)文件就是源代碼文件編譯產(chǎn)生的程序字節(jié)碼文件

MyFirstJava.class18Java程序的開發(fā)過程——編譯源代碼使用JDK實(shí)用程序javJava程序的開發(fā)過程——運(yùn)行程序

要執(zhí)行一個(gè)Java程序非常簡單,只需在字節(jié)碼文件所在目錄下輸入下列命令就可以了:java字節(jié)碼文件名19Java程序的開發(fā)過程——運(yùn)行程序要執(zhí)行一個(gè)Java程序非Question?Question?第2章面向?qū)ο蟮木幊谈拍钊A中科技大學(xué)IBM技術(shù)中心2006第2章面向?qū)ο蟮木幊谈拍钊A中科技大學(xué)IBM技術(shù)中心2002222面向?qū)ο髒s.面向過程面向?qū)ο螅∣OP)——Object-OrientedProgramming用類class封裝數(shù)據(jù)以與與數(shù)據(jù)相關(guān)的操作用類的繼承性來實(shí)現(xiàn)類的重用性多態(tài)性面向“對(duì)象”,由對(duì)象提供服務(wù)面向過程(POP)——Procedure-OrientedProgramming以功能為組織單元通過數(shù)據(jù)結(jié)構(gòu)來描述具體的問題數(shù)據(jù)在功能(函數(shù))之間以參數(shù)的形式被傳送23面向?qū)ο髒s.面向過程面向?qū)ο螅∣OP)——Object現(xiàn)實(shí)世界中的對(duì)象現(xiàn)實(shí)世界是由對(duì)象構(gòu)成的現(xiàn)實(shí)世界中任何實(shí)體都可以看作是對(duì)象現(xiàn)實(shí)世界中的對(duì)象有兩個(gè)共同特征:狀態(tài)行為24現(xiàn)實(shí)世界中的對(duì)象現(xiàn)實(shí)世界是由對(duì)象構(gòu)成的2425252626272728282929消息的性質(zhì)同一對(duì)象可接收不同形式的多個(gè)消息,產(chǎn)生不同的響應(yīng)同一個(gè)消息可以發(fā)給不同的對(duì)象,所做出的響應(yīng)可以截然不同發(fā)送方不需要知道接受方如何對(duì)請(qǐng)求予以響應(yīng)的30消息的性質(zhì)同一對(duì)象可接收不同形式的多個(gè)消息,產(chǎn)生不同的響應(yīng)33131實(shí)例(Instance)定義:特定類所描述的一個(gè)具體對(duì)象32實(shí)例(Instance)定義:特定類所描述的一個(gè)具體對(duì)象3233333434單重繼承與多重繼承單重繼承:一個(gè)子類只有一個(gè)唯一確定的父類單重繼承所構(gòu)成的類的關(guān)系結(jié)構(gòu)是一棵樹多重繼承:一個(gè)子類可以有多個(gè)不同的父類多重繼承所構(gòu)成的類的關(guān)系結(jié)構(gòu)是一個(gè)格Java語言僅支持單重繼承35單重繼承與多重繼承單重繼承:一個(gè)子類只有一個(gè)唯一確定的父類3繼承的作用使軟件系統(tǒng)具有開放性更好地進(jìn)行抽象與分類實(shí)現(xiàn)代碼的復(fù)用提高可維護(hù)性36繼承的作用使軟件系統(tǒng)具有開放性36類型(Type)在面向數(shù)值的編程中,類型通常用作數(shù)據(jù)的表示。在Java這樣的強(qiáng)類型語言中,在編譯期,每一個(gè)變量和表達(dá)式都有一個(gè)類型與之相對(duì)應(yīng)Java中的類型:基本類型、類、接口37類型(Type)在面向數(shù)值的編程中,類型通常用作數(shù)據(jù)的表示。接口(Interface)接口和類一樣也是一種類型,也同樣包含一些方法的定義。但與類不同的是:接口中所定義的所有方法都是抽象方法(即沒有實(shí)現(xiàn)的方法)。接口中所定義的方法由實(shí)現(xiàn)(implement)該接口的類來實(shí)現(xiàn),一個(gè)類可以同時(shí)實(shí)現(xiàn)多個(gè)接口接口機(jī)制使Java的面向?qū)ο缶幊套兊酶屿`活。解決了單重繼承帶來的問題接口定義了對(duì)象的行為模型,相當(dāng)于一個(gè)協(xié)議。實(shí)現(xiàn)接口的各個(gè)類負(fù)責(zé)實(shí)現(xiàn)接口所定義的行為。雖然實(shí)現(xiàn)細(xì)節(jié)各不相同,但對(duì)用戶來說是一樣的行為。38接口(Interface)接口和類一樣也是一種類型,也同樣包面向?qū)ο蟮氖纠纠邪芏鄬?duì)象:點(diǎn)、窗口、顏色、點(diǎn)擊事件……

代碼:ClickMeApp.java,ClickMe.java,Spot.java39面向?qū)ο蟮氖纠纠邪芏鄬?duì)象:點(diǎn)、窗口、顏色、點(diǎn)擊事件…Spot類publicclassSpot{//instancevariablesprivateintsize;publicintx,y;

//constructorpublicSpot(){x=-1;y=-1;size=1;}//methodsforaccesstothesizeinstancevariablepublicvoidsetSize(intnewSize){if(newSize>=0){size=newSize;}}publicintgetSize(){returnsize;}}40Spot類publicclassSpot{40Spot對(duì)象privateSpotspot=null;...spot=newSpot();

41Spot對(duì)象privateSpotspot=null示例中的消息g2d.setColor(Color.WHITE);g2d.fillRect(0,0,getWidth()-1,getHeight()-1);

42示例中的消息g2d.setColor(Color.WHITE示例中的繼承和接口publicclassClickMeextendsJComponentimplementsMouseListener{...}

publicclassClickMeextendsJComponentimplementsMouseListener{...//MethodsrequiredbytheMouseListenerinterface.publicvoidmousePressed(MouseEventevent){if(spot==null){spot=newSpot();spot.setSize(RADIUS);}spot.x=event.getX();spot.y=event.getY();repaint();}publicvoidmouseClicked(MouseEventevent){}publicvoidmouseReleased(MouseEventevent){}publicvoidmouseEntered(MouseEventevent){}publicvoidmouseExited(MouseEventevent){}}

}

43示例中的繼承和接口publicclassClickMe歡迎提問Question!歡迎提問Question!第三章Java語言基礎(chǔ)華中科技大學(xué)IBM技術(shù)中心第三章Java語言基礎(chǔ)華中科技大學(xué)IBM技術(shù)中心變量(Variable)

對(duì)象將它的狀態(tài)存儲(chǔ)在變量中定義:

變量是一個(gè)由標(biāo)識(shí)符命名的數(shù)據(jù)項(xiàng)變量名必須是一個(gè)合法的標(biāo)識(shí)符

--一個(gè)以字母開頭的無限制的Unicode字符序列。變量的聲明:類型名稱[=初始值];inti;doublepi=3.1415926;Stringname;46變量(Variable)對(duì)象將它的狀態(tài)存儲(chǔ)在變量中46數(shù)據(jù)類型

每個(gè)變量都必須有一個(gè)數(shù)據(jù)類型.一個(gè)變量的數(shù)據(jù)類型決定了它能容納的值和在它上面可以進(jìn)行什么操作。Java編程語言有兩大類數(shù)據(jù)類型:原始類型(primitive)

引用類(reference)47數(shù)據(jù)類型每個(gè)變量都必須有一個(gè)數(shù)據(jù)類型.一個(gè)變量的數(shù)據(jù)類型4848原始類型變量包含單個(gè)值,其大小和格式與它的類型匹配:數(shù)字、字符或布爾值。Java語言沒有unsigned類型0xFFFF和0xFF誰大?Java語言必須強(qiáng)制類型轉(zhuǎn)換floatf=0.1;booleanb=1;原始類型

49原始類型變量包含單個(gè)值,其大小和格式與它的類型匹配:數(shù)字、字引用類型數(shù)組,類和接口就是引用數(shù)據(jù)類型.與原始類型變量的值不同的是,引用類型變量的值是對(duì)應(yīng)變量代表的一個(gè)值或一組值的引用(也就是其地址)在其他語言里引用被稱為指針或者內(nèi)存地址。Java不支持顯示地使用地址,而是使用變量的名稱代替。50引用類型數(shù)組,類和接口就是引用數(shù)據(jù)類型.與原始類型變量的值不變量的引用

通過變量名引用變量的值簡單名稱:由單個(gè)標(biāo)識(shí)符組成的名稱限定名稱:通過類名或?qū)ο竺酶念惢驅(qū)ο笾械某蓡T變量System.out.println(i+spot.x);51變量的引用通過變量名引用變量的值51作用范圍

變量的作用范圍是可以通過簡單名稱引用該變量的程序區(qū)域作用范圍也決定了系統(tǒng)為該變量創(chuàng)建和釋放內(nèi)存的時(shí)間52作用范圍變量的作用范圍是可以通過簡單名稱引用該變量的程序區(qū)例子

inti=10;if(i>0){inti=20;System.out.println(“Thevalueofi=”+i);}System.out.println(“Thevalueofi=”+i);53例子inti=10;53最終變量

你可以在任意范圍里將一個(gè)變量定義為最終變量(final)最終變量的值一經(jīng)初始化就不能改變類似于C語言中的常量(const)finalintaFinalVar=0;

finalintblankfinal;...blankfinal=0;54最終變量你可以在任意范圍里將一個(gè)變量定義為最終變量(fin操作符、表達(dá)式、語句和塊自學(xué)!55操作符、表達(dá)式、語句和塊自學(xué)!55第四章對(duì)象基礎(chǔ)和簡單數(shù)據(jù)對(duì)象華中科技大學(xué)IBM技術(shù)中心第四章對(duì)象基礎(chǔ)和簡單數(shù)據(jù)對(duì)象華中科技大學(xué)IBM技術(shù)中心5757對(duì)象的生命周期58對(duì)象的生命周期58CreateObjectDeompublicclassCreateObjectDemo{publicstaticvoidmain(String[]args){//創(chuàng)建一個(gè)Point對(duì)象和兩個(gè)Rectangle對(duì)象Pointorigin_one=newPoint(23,94);Rectanglerect_one=newRectangle(origin_one,100,200);Rectanglerect_two=newRectangle(50,100);//顯示rect_one的寬、高以與面積System.out.println("Widthofrect_one:"+rect_one.width);System.out.println("Heightofrect_one:"+rect_one.height);System.out.println("Areaofrect_one:"+rect_one.area());rect_two.origin=origin_one;//設(shè)置rect_two的位置//顯示rect_two的位置System.out.println("XPositionofrect_two:"+rect_two.origin.x);System.out.println("YPositionofrect_two:"+rect_two.origin.y);//移動(dòng)rect_two并且顯示它的新位置rect_two.move(40,72);System.out.println("XPositionofrect_two:"+rect_two.origin.x);System.out.println("YPositionofrect_two:"+rect_two.origin.y);}}59CreateObjectDeompublicclassC6060616162626363對(duì)象創(chuàng)建的實(shí)例publicclassPoint{publicintx=0;publicinty=0;publicPoint(intx,inty){this.x=x;this.y=y;}}Pointorigin_one=newPoint(23,94);64對(duì)象創(chuàng)建的實(shí)例publicclassPoint{Poi6565構(gòu)造器的重載(Overload)publicclassRectangle{publicintwidth=0;publicintheight=0;publicPointorigin;publicRectangle(){origin=newPoint(0,0);}publicRectangle(Pointp){origin=p;}publicRectangle(intw,inth){this(newPoint(0,0),w,h);}publicRectangle(Pointp,intw,inth){origin=p;width=w;height=h;}…….}一個(gè)類可以包含多個(gè)構(gòu)造器,這種情況成為構(gòu)造器的重載同一個(gè)類中的多個(gè)構(gòu)造器通過參數(shù)的數(shù)目與類型的不同來區(qū)分66構(gòu)造器的重載(Overload)publicclassR6767實(shí)例成員與類成員實(shí)例成員包括實(shí)例變量與實(shí)例方法實(shí)例成員依賴于實(shí)例存在同一個(gè)類的不同實(shí)例都擁有一份實(shí)例變量的拷貝,對(duì)某個(gè)實(shí)例的實(shí)例變量的操作不影響到其它實(shí)例實(shí)例變量遵循對(duì)象的生命周期,隨著對(duì)象的創(chuàng)建而創(chuàng)建,隨著對(duì)象的消亡而消亡必須通過實(shí)例的引用來調(diào)用實(shí)例方法類成員包括類變量與類方法類成員不依賴于實(shí)例存在同一個(gè)類的不同實(shí)例共享同一個(gè)類變量,對(duì)類變量的改變會(huì)影響到所有實(shí)例類變量的生存期不依賴于對(duì)象,其它類可以不用通過創(chuàng)建該類的實(shí)例,直接通過類名訪問它們。同樣,類方法也可以直接通過類名訪問。68實(shí)例成員與類成員實(shí)例成員包括實(shí)例變量與實(shí)例方法68實(shí)例成員與類成員classABCD{chardata;staticintshare_data;}classDemo{ABCDa,b,c,d;…//實(shí)例化}69實(shí)例成員與類成員classABCD{69實(shí)例變量的引用簡單名稱

當(dāng)實(shí)例變量處在作用域內(nèi)(即對(duì)象的類的代碼內(nèi))的時(shí)候限定名稱objectReference.variableName

當(dāng)實(shí)例變量處在作用域外時(shí)使用限定名稱System.out.println("Widthofrect_one:"+rect_one.width);System.out.println("Heightofrect_one:"+rect_one.height);intheight=newRectangle().height;70實(shí)例變量的引用簡單名稱System.out.println(關(guān)于變量訪問的說明建議不要通過其它對(duì)象或類直接操作對(duì)象的變量,可能引起無效值理想情況下,類會(huì)提供一些方法,其他對(duì)象可以通過他們檢查或修改變量,確保值有效,而且如果變量的類型和名稱發(fā)生了變化,不會(huì)影響它的使用者在某些情況下,可以允許對(duì)對(duì)象變量的直接訪問,以使類更小更簡單,也可使變量適用于更廣泛范圍;JAVA編程語言提供了一個(gè)訪問控制機(jī)制,通過這種機(jī)制,類可以決定那些其它的類可以直接訪問它的變量(第五章中介紹)。71關(guān)于變量訪問的說明建議不要通過其它對(duì)象或類直接操作對(duì)象的變量調(diào)用對(duì)象的方法使用限定名稱來調(diào)用對(duì)象的方法 objectReference.methodName(argumentList);

或者 objectReference.methodName();

System.out.println("Areaofrect_one:"+rect_one.area());rect_two.move(40,72);intareaOfRectangle=newRectangle(100,50).area();72調(diào)用對(duì)象的方法使用限定名稱來調(diào)用對(duì)象的方法System.o關(guān)于方法調(diào)用方法被聲明為public,就可以被任何其它的類所訪問。有時(shí),類需要限制對(duì)它的方法的訪問類可以使用與控制變量訪問相同的機(jī)制來對(duì)它的方法進(jìn)行訪問控制(第五章中介紹)

73關(guān)于方法調(diào)用方法被聲明為public,就可以被任何其它的類所對(duì)象的清除JAVA運(yùn)行時(shí)環(huán)境在當(dāng)對(duì)象不再被使用的時(shí)候清除它們,這個(gè)過程就是所謂的“垃圾收集”(garbagecollection)Java的垃圾收集器自動(dòng)掃描對(duì)象的動(dòng)態(tài)內(nèi)存區(qū),對(duì)被引用的對(duì)象加標(biāo)記,然后把沒有引用的對(duì)象作為垃圾收集起來并釋放。垃圾收集器作為一個(gè)線程運(yùn)行。當(dāng)系統(tǒng)的內(nèi)存用盡或程序中調(diào)用System.gc()要求進(jìn)行垃圾收集時(shí),垃圾收集線程與系統(tǒng)同步運(yùn)行。否則垃圾收集器在系統(tǒng)空閑時(shí)異步地執(zhí)行。74對(duì)象的清除JAVA運(yùn)行時(shí)環(huán)境在當(dāng)對(duì)象不再被使用的時(shí)候清除它們無用對(duì)象的判定當(dāng)某個(gè)對(duì)象不在被任何引用變量引用時(shí),該對(duì)象是無用對(duì)象,將被清除。一般有如下兩種情況:引用變量超出了作用域{StringBuffers=newStringBuffer(“thisisatest”);……}//超出對(duì)象作用域……引用變量引用了其它對(duì)象或引用了空對(duì)象StringBuffers=newStringBuffer(“test1”);……s=newStringBuffer(“test2”);//引用了新的對(duì)象……s=null;//引用為空75無用對(duì)象的判定當(dāng)某個(gè)對(duì)象不在被任何引用變量引用時(shí),該對(duì)象是無finalize()方法在對(duì)對(duì)象進(jìn)行垃圾收集前,Java運(yùn)行時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用對(duì)象的finalize()方法來釋放系統(tǒng)資源。某些情況下,程序員可能需要實(shí)現(xiàn)該方法來釋放不由垃圾收集器所控制的資源。但這種情況非常少見finalize()方法是在Object中有缺省實(shí)現(xiàn),在用戶自定義的類中,它可以被覆蓋,但一般在最后要調(diào)用父類的finalize()方法來清除對(duì)象所使用的所有資源76finalize()方法在對(duì)對(duì)象進(jìn)行垃圾收集前,Java運(yùn)行問題一下列程序的運(yùn)行結(jié)果?publicclassSomethingIsWrong{publicstaticvoidmain(String[]args){RectanglemyRect;myRect.width=40;myRect.height=50;System.out.println("myRect'sareais"+myRect.area());}}77問題一下列程序的運(yùn)行結(jié)果?publicclassSome問題二現(xiàn)有一個(gè)Point和Rectangle對(duì)象,代碼執(zhí)行后有多少引用指向它們?有沒有對(duì)象需要垃圾收集?Pointpoint=newPoint(2,4);Rectanglerectangle=newRectangle(point,20,20);point=null;78問題二現(xiàn)有一個(gè)Point和Rectangle對(duì)象,代碼執(zhí)行后字符和字符串JavaAPI提供了三個(gè)處理字符數(shù)據(jù)的類:Character:這個(gè)類的實(shí)例可以容納單一的字符數(shù)值。該類還定義了一些簡潔的方法來操作或者檢查單一字符數(shù)據(jù)。String:這個(gè)類用于處理由多個(gè)字符組成的不可變數(shù)據(jù)。StringBuffer:這個(gè)類用于存儲(chǔ)和操作由多個(gè)字符組成的可變數(shù)據(jù)。79字符和字符串JavaAPI提供了三個(gè)處理字符數(shù)據(jù)的類:79字符類(Character)字符類的對(duì)象包含單個(gè)字符值當(dāng)需要使用對(duì)象時(shí),可以用字符對(duì)象替代原始的char類型的變量80字符類(Character)字符類的對(duì)象包含單個(gè)字符值80字符類——構(gòu)造器和方法Character(char)-Character類唯一的構(gòu)造器,它創(chuàng)建一個(gè)字符對(duì)象,其中包含由參數(shù)提供的值,一旦創(chuàng)建了Character對(duì)象,它包含的值就不能改變。compareTo(Character)-這個(gè)實(shí)例方法比較兩個(gè)字符對(duì)象包含的值,這個(gè)方法返回一個(gè)整數(shù)值,表示當(dāng)前對(duì)象中的值是大于、等于還是小于參數(shù)所包含的值81字符類——構(gòu)造器和方法Character(char)-Cha字符類——構(gòu)造器和方法equals(Object)-這個(gè)實(shí)例方法比較當(dāng)前對(duì)象包含的值與參數(shù)對(duì)象包含的值,如果兩個(gè)對(duì)象包含的值相等,那么這個(gè)方法返回truetoString()-這個(gè)實(shí)例方法將此對(duì)象轉(zhuǎn)換為字符串charValue()-這個(gè)實(shí)例方法以原始char值的形式返回此字符對(duì)象包含的值isUpperCase()-這個(gè)實(shí)例方法判斷一個(gè)原始char值是否是大寫字母82字符類——構(gòu)造器和方法equals(Object)-這個(gè)實(shí)例字符類——例程publicclassCharacterDemo{publicstaticvoidmain(Stringargs[]){Charactera=newCharacter('a');Charactera2=newCharacter('a');Characterb=newCharacter('b');intdifference=pareTo(b);if(difference==0){System.out.println("aisequaltob.");}elseif(difference<0){System.out.println("aislessthanb.");}elseif(difference>0){System.out.println("aisgreaterthanb.");}System.out.println("ais"+((a.equals(a2))?"equal":"notequal")+"toa2.");System.out.println("Thecharacter"+a.toString()+"is"+(Character.isUpperCase(a.charValue())?"upper":"lower")+"case.");}}程序的輸出:aislessthanb.aisequaltoa2.Thecharacteraislowercase.83字符類——例程publicclassCharacterD字符類——類方法84字符類——類方法84問題Charactera=newCharacter('a');Characterb=newCharacter('a');下列boolean表達(dá)式的值是true還是false?(1)pareTo(b)==0(2)a.equals(b)(3)a==b85問題Charactera=newCharacter(字符串和字符串緩沖區(qū)Java平臺(tái)提供兩個(gè)類String和StringBuffer,它們用于存儲(chǔ)和操作字符串-由多個(gè)字符組成的字符數(shù)據(jù)。String類用于其值不能改變的字符串;StringBuffer類用于被修改的字符串,通常用來動(dòng)態(tài)的構(gòu)造字符數(shù)據(jù)。字符串是常量,比字符串緩沖區(qū)更高效,而且字符串可以被共享。86字符串和字符串緩沖區(qū)Java平臺(tái)提供兩個(gè)類String和St字符串(String)使用字符串常量時(shí),需要?jiǎng)?chuàng)建String對(duì)象,和其它對(duì)象不同,String對(duì)象可以通過簡單賦值語句創(chuàng)建:Stringname=“Petter”;此外,也可根據(jù)String類的構(gòu)造函數(shù)創(chuàng)建String對(duì)象:Stringname=newString(“Petter”);對(duì)于程序任何位置出現(xiàn)的雙引號(hào)標(biāo)記的字符串,系統(tǒng)都會(huì)自動(dòng)創(chuàng)建一個(gè)String對(duì)象??赏ㄟ^String對(duì)象的方法對(duì)字符串進(jìn)行操作87字符串(String)使用字符串常量時(shí),需要?jiǎng)?chuàng)建String字符串——構(gòu)造器88字符串——構(gòu)造器88字符串的不可變性?String類用于其值不能改變的字符串觀察下列程序:publicclassStringTest{publicstaticvoidmain(String[]args){Strings="abc";s=s+“defg";System.out.println(s);}}程序運(yùn)行結(jié)果是abc還是abcdefg?89字符串的不可變性?String類用于其值不能改變的字符串pu9090字符串緩沖區(qū)(StringBuffer)String對(duì)象表示的是不可更改的字符串對(duì)象,如果需要修改String對(duì)象所表示的內(nèi)容,必須重新創(chuàng)建一個(gè)對(duì)象:Stringstr=“Petter”;str=str+“&Bob”+“&Tom”;當(dāng)修改操作頻繁,或字符串的值很大時(shí),會(huì)額外分配大量內(nèi)存因此,Java語言引入了一個(gè)StringBuffer類,用來表示內(nèi)容可以擴(kuò)充和修改字符串對(duì)象91字符串緩沖區(qū)(StringBuffer)String對(duì)象表示StringBuffer——構(gòu)造器必須使用new操作符創(chuàng)建字符串緩沖區(qū)Strings="DotsawIwasTod";StringBufferdest=newStringBuffer(s);92StringBuffer——構(gòu)造器必須使用new操作符創(chuàng)建字訪問器方法用于獲取關(guān)于對(duì)象的信息的方法被稱為訪問器方法。字符串和字符串緩沖區(qū)都可以使用的一個(gè)訪問器方法就是length方法。length方法返回字符串和字符串緩沖區(qū)中包含的字符數(shù)。Stringpalindrome="DotsawIwasTod";intlen=palindrome.length();93訪問器方法用于獲取關(guān)于對(duì)象的信息的方法被稱為訪問器方法。St容量在StringBuffer類中還有一個(gè)capacity()方法,它返回分配給這個(gè)字符串緩沖區(qū)的容量,而不是使用量。使用量會(huì)改變,但是容量始終是不變的。94容量在StringBuffer類中還有一個(gè)capacity(通過索引得到字符charAt()訪問器方法,通過索引從字符串或者字符串緩沖區(qū)得到字符,索引值從零開始。StringanotherPalindrome="Niagara.Oroaragain!";charaChar=anotherPalindrome.charAt(9);95通過索引得到字符charAt()訪問器方法,通過索引從字符串substring方法如果要從字符串或者字符串緩沖區(qū)得到多個(gè)字符,可以使用substring方法。Stringsubstring(int)Stringsubstring(int,int)StringanotherPalindrome="Niagara.Oroaragain!";Stringroar=anotherPalindrome.substring(11,15);96substring方法如果要從字符串或者字符串緩沖區(qū)得到多個(gè)searchstring類提供兩個(gè)訪問器方法,返回特定的字符或者子字符串在字符串中的位置。indexOf()方法從字符串的開頭查找;lastindexOf()方法從字符串的末尾查找;stringBuffer類不支持indexOf()和lastindexOf()方法。97searchstring類提供兩個(gè)訪問器方法,返回特定的字符search98search98searchexamplepublicclass{privateStringfullPath;privatecharpathSeparator,extensionSeparator;public(Stringstr,charsep,charext){fullPath=str;pathSeparator=sep;extensionSeparator=ext;}publicStringextension(){intdot=fullPath.lastIndexOf(extensionSeparator);returnfullPath.substring(dot+1);}publicString(){intdot=fullPath.lastIndexOf(extensionSeparator);intsep=fullPath.lastIndexOf(pathSeparator);returnfullPath.substring(sep+1,dot);}publicStringpath(){intsep=fullPath.lastIndexOf(pathSeparator);returnfullPath.substring(0,sep);}}99searchexamplepublicclass{9searchexamplepublicclass{publicstaticvoidmain(String[]args){myHomePage=new("/home/mem/index.html",'/','.');System.out.println("Extension="+myHomePage.extension());System.out.println("="+myHomePage.());System.out.println("Path="+myHomePage.path());}}程序輸出:Extension=html=indexPath=/home/mem100searchexamplepublicclass{程比較字符串和字符串緩沖區(qū)101比較字符串和字符串緩沖區(qū)101操作字符串102操作字符串102修改字符串緩沖區(qū)103修改字符串緩沖區(qū)103數(shù)字類Number類與其子類主要用于處理數(shù)字Number類的對(duì)象包含了原始類型的數(shù)值并且提供了一些有用的變量和方法,用于對(duì)數(shù)值進(jìn)行處理104數(shù)字類Number類與其子類主要用于處理數(shù)字104類型包裝器類(Type-Wrapperclass)數(shù)字類、Boolean、Character和void類統(tǒng)稱為類型包裝器類在需要對(duì)象的地方,可將原始類型的值存儲(chǔ)在類型包裝器對(duì)象中這些類定義了一些有用的變量,提供關(guān)于數(shù)據(jù)類型的一般信息這些類還定義了一些有用的方法,用于將值轉(zhuǎn)換為其他類型、轉(zhuǎn)換為字符串等等這些類用于反射,反射這種java機(jī)制允許程序收集關(guān)于JVM中任何對(duì)象或類的信息此外,BigInteger和BigDecimal還擴(kuò)展了原始數(shù)據(jù)類型105類型包裝器類(Type-Wrapperclass)數(shù)字類、例程publicclassNumberDemo{publicstaticvoidmain(Stringargs[]){FloatfloatOne=newFloat(14.78f-13.78f);FloatfloatTwo=Float.valueOf("1.0");DoubledoubleOne=newDouble(1.0);intdifference=floatOpareTo(floatTwo);if(difference==0){System.out.println("floatOneisequaltofloatTwo.");}elseif(difference<0){System.out.println("floatOneislessthanfloatTwo.");}elseif(difference>0){System.out.println("floatOneisgreaterthanfloatTwo.");}System.out.println("floatOneis“+((floatOne.equals(doubleOne))?"equal":"notequal")+"todoubleOne.");}}floatOneisequaltooneAgain.floatOneisnotequaltodoubleOne.106例程publicclassNumberDemo{fl107107數(shù)組數(shù)組是一個(gè)固定長度的結(jié)構(gòu),它存儲(chǔ)多個(gè)相同類型的值數(shù)組直接被JAVA語言所支持,所以沒有一個(gè)數(shù)組類數(shù)組的長度在數(shù)組創(chuàng)建的時(shí)候就已經(jīng)確定。數(shù)組元素就是數(shù)組中的一個(gè)數(shù)值,可以通過數(shù)組中的位置來訪問它。108數(shù)組數(shù)組是一個(gè)固定長度的結(jié)構(gòu),它存儲(chǔ)多個(gè)相同類型的值108創(chuàng)建數(shù)組聲明一個(gè)引用變量來引用一個(gè)數(shù)組格式:type[]引用變量名

type引用變量名[](允許但不推薦)數(shù)組變量的聲明并不創(chuàng)建數(shù)組創(chuàng)建一個(gè)數(shù)組使用new操作符顯示地創(chuàng)建數(shù)組格式:newelementType[arraySize]數(shù)組初始化器可以使用簡寫的語法創(chuàng)建并初始化數(shù)組:type[]引用變量名={數(shù)組元素值…};

109創(chuàng)建數(shù)組聲明一個(gè)引用變量來引用一個(gè)數(shù)組109使用數(shù)組訪問數(shù)組元素引用變量名(數(shù)組名)[index]得到數(shù)組大小引用變量名(數(shù)組名).length110使用數(shù)組訪問數(shù)組元素110例程publicclassArrayDemo{publicstaticvoidmain(String[]args){int[]anArray;anArray=newint[10];for(inti=0;i<anArray.length;i++){anArray[i]=i;System.out.print(anArray[i]+"");}System.out.println();}}111例程publicclassArrayDemo{111對(duì)象數(shù)組數(shù)組元素可以是基本類型也可以是引用類型當(dāng)數(shù)組元素是引用類型時(shí)(也即數(shù)組元素為對(duì)象時(shí)需要注意:數(shù)組元素也必須要被創(chuàng)建和初始化Integer[]anArray=newInteger[5];for(inti=0;i<anArray.length;i++){System.out.println(anArray[i]);}112對(duì)象數(shù)組數(shù)組元素可以是基本類型也可以是引用類型Integer數(shù)組的數(shù)組數(shù)組的數(shù)組可以看作是“數(shù)組引用”的數(shù)組與對(duì)象數(shù)組一樣,必須顯示地在數(shù)組中創(chuàng)建子數(shù)組子數(shù)組的長度并不相同例:int[][]aMatrix=newint[4][];

……

aMatrix[1]=newint[5];

aMatrix[2]=newint[10];113數(shù)組的數(shù)組數(shù)組的數(shù)組可以看作是“數(shù)組引用”的數(shù)組113復(fù)制數(shù)組publicstaticvoidarraycopy(Objectsource,intsrcIndex,Objectdest,intdestIndex,intlength)114復(fù)制數(shù)組publicstaticvoidarrayco例程publicclassArrayCopyDemo{publicstaticvoidmain(String[]args){char[]copyFrom={'d','e','c','a','f','f','e', 'i','n','a','t','e','d'};char[]copyTo=newchar[7];System.arraycopy(copyFrom,2,copyTo,0,7);System.out.println(newString(copyTo));}}115例程publicclassArrayCopyDemo{問題publicclassWhatHappens{publicstaticvoidmain(String[]args){StringBuffer[]stringBuffers=newStringBuffer[10];for(inti=0;i<stringBuffers.length;i++){stringBuffers[i].append("StringBufferatindex"+i);}}}

116問題publicclassWhatHappens{1歡迎提問Question!歡迎提問Question!第六章接口和包華中科技大學(xué)IBM技術(shù)中心第六章接口和包華中科技大學(xué)IBM技術(shù)中心119119Java接口的引入Java語言只支持單重繼承,它的程序中的類的層次結(jié)構(gòu)是樹狀結(jié)構(gòu),在處理復(fù)雜問題時(shí)單重繼承顯得力不從心。為了使Java程序的類層次結(jié)構(gòu)更加合理,更符合實(shí)際問題的需要,我們把用于完成特定功能的若干屬性組織成相對(duì)獨(dú)立的屬性集合,這種屬性的集合就是接口。120Java接口的引入Java語言只支持單重繼承,它的程序中的類Java接口定義定義:接口是一個(gè)有名稱的方法定義和常量定義的集合,但沒有方法的實(shí)現(xiàn)。接口定義了一個(gè)行為協(xié)議,類層次結(jié)構(gòu)中任何地方的任何類都可以實(shí)現(xiàn).接口是由常量和抽象方法組成的特殊類:接口中的屬性都是用final修飾的常量接口中的方法都是用abstract修飾的沒有方法體的抽象方法。121Java接口定義定義:接口是一個(gè)有名稱的方法定義和常量定義的Java語言的接口接口功能的真正實(shí)現(xiàn)是由實(shí)現(xiàn)接口的各個(gè)類來定義接口中各個(gè)抽象方法的具體方法體。Java語言通過接口實(shí)現(xiàn)了類間的多重繼承功能。122Java語言的接口接口功能的真正實(shí)現(xiàn)是由實(shí)現(xiàn)接口的各個(gè)類來定Java接口實(shí)現(xiàn)多重繼承單一繼承指明了子類和父類的層次關(guān)系和各自

的行為。多重繼承是指一個(gè)類有多個(gè)父類,這使得類的

層次關(guān)系不清楚。接口則把方法的定義同類的層次區(qū)分開來,通

過接口可以在運(yùn)行中動(dòng)態(tài)地定位所調(diào)用的方

法,同時(shí)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,使得接口

提供了比多重繼承更簡單、更靈活的功能。123Java接口實(shí)現(xiàn)多重繼承單一繼承指明了子類和父類的層次關(guān)系和接口vs抽象類接口不可以實(shí)現(xiàn)任何方法,而抽象類可以;類可以實(shí)現(xiàn)多個(gè)接口,但父類僅只有一個(gè);接口和繼承無關(guān),不是類層次結(jié)構(gòu)的一部分。無關(guān)的類可以實(shí)現(xiàn)相同接口。124接口vs抽象類接口不可以實(shí)現(xiàn)任何方法,而抽象類可以;1定義接口125定義接口125完整的接口定義規(guī)范126完整的接口定義規(guī)范126接口定義接口包括接口聲明和接口體兩部分:[public]interface接口名[extends父接口名列表]{[public][static][final]類型變量名=常量值;[public][abstract][native]返回值類型方法名(參數(shù)列表)[throws異常列表];}publicinterfaceMyInterface{intMAXSIZE=1024;publicabstractmyMethod(Stringname);}127接口定義接口包括接口聲明和接口體兩部分:publicint接口定義的說明聲明接口的關(guān)鍵字interface引導(dǎo)著所定義的接口名字(符合Java標(biāo)識(shí)符規(guī)定);聲明接口也需要給出訪問控制符;接口具有繼承性,通過關(guān)鍵字extends聲明該新接口是某父接口的派生接口;一個(gè)接口可以有多個(gè)父接口,它們之間用逗號(hào)分隔,形成父接口列表。

128接口定義的說明聲明接口的關(guān)鍵字interface引導(dǎo)著所定義接口體的說明接口體的定義有兩個(gè)部分:對(duì)接口中屬性的聲明對(duì)接口中方法的聲明;系統(tǒng)默認(rèn):接口中的所有屬性都是public,static和final(公共,靜態(tài)和最終);系統(tǒng)默認(rèn):接口中的所有方法都是public和abstract(公共和抽象);接口中方法的方法體可用Java語言書寫,也可用其它語言書寫(加native修飾)。129接口體的說明接口體的定義有兩個(gè)部分:129實(shí)例定義一個(gè)股票監(jiān)視器。一旦股票價(jià)格變化,立即通知觀察者watcher。Watcher是一個(gè)接口,它只有一個(gè)方法,valueChanged知道股票變化的類必須實(shí)現(xiàn)此方法。從而必須實(shí)現(xiàn)StockWatcher接口不僅僅是StockMointer的超類,其它類只要實(shí)現(xiàn)此接口,就可以享受股票價(jià)格變化通知服務(wù)。publicclassStockMonitor{publicvoidwatchStock(StockWatcherwatcher,StringtickerSymbol,doubledelta){}}130實(shí)例定義一個(gè)股票監(jiān)視器。一旦股票價(jià)格變化,立即通知觀察者wa實(shí)現(xiàn)接口具體地實(shí)現(xiàn)接口所規(guī)定的功能,需要某個(gè)類為接口中的所有抽象方法編寫實(shí)在的方法體。在類的聲明(定義)中用implements關(guān)鍵字說明該類將要實(shí)現(xiàn)哪些接口;如果實(shí)現(xiàn)某個(gè)接口的類不是abstract的抽象類,則在類的定義部分必須為所有抽象方法定義具體方法體,方法頭部分應(yīng)該與接口中的定義完全一致;131實(shí)現(xiàn)接口具體地實(shí)現(xiàn)接口所規(guī)定的功能,需要某個(gè)類為接口中的所實(shí)現(xiàn)接口如果實(shí)現(xiàn)某接口的類是abstract的抽象類,則在類的定義部分可以不具體實(shí)現(xiàn)接口中的所有方法;一個(gè)類在實(shí)現(xiàn)某個(gè)接口的抽象方法時(shí),必須使用完全相同的方法聲明。接口的抽象方法訪問修飾符為public,所以,類在實(shí)現(xiàn)方法時(shí)必須使用修飾符public,否則,系統(tǒng)將警告;因?yàn)榭s小了接口中定義的方法的訪問控制范圍。132實(shí)現(xiàn)接口如果實(shí)現(xiàn)某接口的類是abstract的抽象類,則在類實(shí)例publicclassStockAppletextendsAppletimplementsStockWatcher{...publicvoidvalueChanged(StringtickerSymbol,doublenewValue){if(tickerSymbol.equals(sunTicker)){...}elseif(tickerSymbol.equals(oracleTicker)){...}elseif(tickerSymbol.equals(ciscoTicker)){...}}}133實(shí)例publicclassStockAppletext接口功能不能簡單擴(kuò)大例如:要加個(gè)報(bào)股價(jià)的方法在接口里,此時(shí)所有實(shí)現(xiàn)它的類不能正常工作。publicinterfaceStockWatcher{finalStringsunTicker="SUNW";finalStringoracleTicker="ORCL";finalStringciscoTicker="CSCO";voidvalueChanged(StringtickerSymbol,doublenewValue);voidcurrentValue(StringtickerSymbol,doublenewValue);}134接口功能不能簡單擴(kuò)大例如:要加個(gè)報(bào)股價(jià)的方法在接口里,此時(shí)所用繼承來擴(kuò)大接口如果需要增加接口的功能,可以利用繼承來實(shí)現(xiàn):publicinterfaceStockTrackerextendsStockWatcher{voidcurrentValue(StringtickerSymbol,doublenewValue);}135用繼承來擴(kuò)大接口如果需要增加接口的功能,可以利用繼承來實(shí)現(xiàn):問題實(shí)現(xiàn)java.util.Iterator接口的類必須實(shí)現(xiàn)哪些方法?Next,hasnextandremove下面的接口有什么錯(cuò)誤?publicinterfaceSomethingIsWrong{publicvoidaMethod(intaValue){System.out.println("HiMom");}}136問題實(shí)現(xiàn)java.util.Iterator接口的類必須實(shí)現(xiàn)問題如何更正上面接口的錯(cuò)誤?下面的接口是正確的嗎?publicinterfaceMarker{}137問題如何更正上面接口的錯(cuò)誤?publicinterfaceJava語言的包引入的原因:容易找到和使用類避免名稱沖突控制訪問定義:包是一個(gè)相關(guān)的類和接口的集合,它可以提供訪問保護(hù)和名稱空間管理。

138Java語言的包引入的原因:138Java語言的包Java平臺(tái)中的類和接口是各種包的成員,這些類和接口是按照功能綁定的;例如:基本的類在java.lang中;再例如:用于輸入和輸出的類在java.io中。139Java語言的包Java平臺(tái)中的類和接口是各種包的成員,這些Java語言的包包是一種松散的類的集合,通常把需要在一起工作的類(互相訪問)放入一個(gè)包。在Java語言程序設(shè)計(jì)中,通常需要定義許多類;就像利用“文件夾”把許多文件組織在一起,使硬盤管理的文件更清晰、更有條理一樣;Java利用“包”把一些需要在一起操作的類組織在一起,以便程序員更好地管理操作這些類。140Java語言的包包是一種松散的類的集合,通常把需要在一起工作無名包系統(tǒng)自動(dòng)建立“無名包”,也就是默認(rèn)包或缺省包在缺省情況下,系統(tǒng)會(huì)為每一個(gè)(.java)源文件創(chuàng)建一個(gè)無名(noname)包,這個(gè)源文件中定義的所有類都隸屬于這個(gè)無名包,它們之間可以相互引用非private(私有)的域或方法;無名包中的類不能被其它包中的類所引用或復(fù)用。141無名包系統(tǒng)自動(dòng)建立“無名包”,也就是默認(rèn)包或缺省包141無名包缺省包一般只用于臨時(shí)程序或測(cè)試程序.建議在實(shí)際系統(tǒng)開發(fā)中,為每個(gè)類指定有名的包。Java使用文件系統(tǒng)來存儲(chǔ)包,包的名稱必須和程序文件所在目錄名完全一樣(大小寫敏感)。如果定義了一個(gè)多級(jí)結(jié)構(gòu)的包,其結(jié)構(gòu)也必須和文件系統(tǒng)的目錄結(jié)構(gòu)完全一致。142無名包缺省包一般只用于臨時(shí)程序或測(cè)試程序.142有名包創(chuàng)建有名包的語句格式為package<包名>;語句功能:該語句將創(chuàng)建一個(gè)具有指定名字的包,該包將把當(dāng)前.java文件中的所有類集合到這個(gè)包內(nèi)。創(chuàng)建有名包,應(yīng)該先創(chuàng)建一個(gè)子文件夾(同包名)以便存放當(dāng)前.java文件和對(duì)應(yīng)的.class文件。143有名包創(chuàng)建有名包的語句格式為143有名包例如:packagecardclasses;

該語句是將當(dāng)前類置于包c(diǎn)ardclassess中,需要在當(dāng)前文件夾下創(chuàng)建一個(gè)名為cardclasses的子文件夾。再例如:packagecardsystem.cardclasses;

該語句將當(dāng)前類置于cardsystem.cardclasses中,需要在當(dāng)前文件夾下創(chuàng)建子文件cardsystem并在cardsystem下再創(chuàng)建的子文件cardclasses,當(dāng)前類存放在這個(gè)文件夾里。144有名包例如:packagecardclasses;144使用包成員只有公共的包成員可以從定義它們的包外訪問,要從包外訪問公共的包成員,必須采用以下的方法:用成員的限定名引用;導(dǎo)入包成員;導(dǎo)入成員所屬的整個(gè)包。145使用包成員只有公共的包成員可以從定義它們的包外訪問,要從包外使用包成員使用包名作為類名前綴:java.util.Vectorvc=newjava.util.Vector()加載需要使用的類importjava.util.Vector;

……Vectorvc=newVector();146使用包成員使用包名作為類名前綴:146使用包成員加載整個(gè)包importjava.util.*;

……Vectorvc=newVector();消除名稱的二義性使用成員的限定名;使用環(huán)境變量classpathsetclasspath=……javac–classpath……MyClass.javajava–classpath……MyClass147使用包成員加載整個(gè)包147使用包成員在使用import語句的時(shí)候,可以使用通配符一次導(dǎo)入一個(gè)包中的所有類,如:importjava.util.*;這樣,我們?cè)谑褂胘ava.util包中的任何類時(shí),就可以直接使用簡單類名。需要注意的是,import語句要么導(dǎo)入一個(gè)類,要么導(dǎo)入一個(gè)完整包。不能使用通配符標(biāo)記包的子集或多個(gè)包,下面三條語句均無法通過編譯:importjava.applet.A*;importjava.*.*;importjava.*.io;148使用包成員在使用import語句的時(shí)候,可以使用通配符一次導(dǎo)使用包成員為了簡化代碼,Java語言規(guī)定在以下情況時(shí)無需使用import語句導(dǎo)入包:使用缺省包中的類使用java.lang包中的類使用和當(dāng)前類在同一個(gè)包中的其他類149使用包成員為了簡化代碼,Java語言規(guī)定在以下情況時(shí)無需使用管理源代碼文件將類或者接口的源代碼放在一個(gè)文本文件中,文件名為類或者接口的簡單名;將源代碼文件放在一個(gè)目錄中,目錄名反映的是類或者接口所屬的包的名稱。例如:150管理源代碼文件將類或者接口的源代碼放在一個(gè)文本文件中,文件名管理源代碼文件包成員的限定名稱與文件的路徑是對(duì)應(yīng)的,它們的對(duì)應(yīng)關(guān)系為:151管理源代碼文件包成員的限定名稱與文件的路徑是對(duì)應(yīng)的,它們的對(duì)管理類文件與源代碼文件一樣,字節(jié)碼文件也可以通過包來進(jìn)行管理;字節(jié)碼文件不必和源代碼文件位與相同的目錄中,可以單獨(dú)管理;這樣做的目的可以隱藏源代碼文件。152管理類文件與源代碼文件一樣,字節(jié)碼文件也可以通過包來進(jìn)行管理類路徑定義:類路徑是一個(gè)目錄或zip文件的有序列表,用于搜索類文件。類路徑中列出的每個(gè)目錄都是包含包目錄的頂層目錄,編譯器和解釋器可以根據(jù)類的包名稱和類名從頂層目錄開始構(gòu)造路徑的其余部分。例如:上圖所示的目錄結(jié)構(gòu)的類路徑項(xiàng)目包含classes,但是不包含com或者com以下的任何目錄,編譯器和解釋器用.class文件的完整包名構(gòu)造它的路徑名。153類路徑定義:類路徑是一個(gè)目錄或zip文件的有序列表,用于搜索問題假設(shè)你已經(jīng)寫了一些類,并且需要將這些類放進(jìn)三個(gè)包中,如下所示:為了將這些類放到正確的包中,需要在每個(gè)源代碼中增加什么代碼?154問題假設(shè)你已經(jīng)寫了一些類,并且需要將這些類放進(jìn)三個(gè)包中,如下問題InClient.javaadd:pac

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論