第03章java語言面向?qū)ο蠡A(chǔ)_第1頁
第03章java語言面向?qū)ο蠡A(chǔ)_第2頁
第03章java語言面向?qū)ο蠡A(chǔ)_第3頁
第03章java語言面向?qū)ο蠡A(chǔ)_第4頁
第03章java語言面向?qū)ο蠡A(chǔ)_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

目第3章Java語言面向?qū)ο蠡? UML基礎(chǔ)知 UML簡 UML 類 包 package語 import語 JAR包的創(chuàng)建與運 習(xí)題 實驗三Java面向?qū)ο蠡?面向?qū)ο螅∣bjectOriented,OO)2060Simula-67面向(Object(Class在面向?qū)ο筌浖こ蹋∣bjectOrientedSoftwareEngineering,OOSE)中,其軟件開發(fā)過程中包括面向?qū)ο蠓治觯∣bject-Orientedysis,OOA、面向?qū)ο笤O(shè)計(Object-OrientedDesign,OOD、面向?qū)ο髮崿F(xiàn)/面向?qū)ο蟪绦蛟O(shè)計(Object-OrientedProgramming,OOP)和面向?qū)ο鬁y試(Object-OrientedTest,OOT)等基本活動,這些活動是無縫耦合交叉套疊的。抽象 Java語言中,抽象()有兩種含義:①若抽象為動詞,則指上述的抽象思維過對象類實例方法應(yīng)消息的方法。在Java中把方法稱為成員方法,在C++中把方法稱為成員函數(shù)。屬性都有自己特有的屬性值。在Java中把方屬性為成員變量,在C++中把屬性稱為數(shù)據(jù)成員??梢韵騽e的對象發(fā)送消息請求服務(wù)。消息通信模型如圖3-1所示。 圖3-1消息通信模量和成員方法的。消息的基本數(shù)據(jù)結(jié)構(gòu)(規(guī)格說明)主要包括提供服務(wù)的對象標(biāo)識、服接口外提供服務(wù)。對象的接口由向服務(wù)使用者公開的所有方法構(gòu)成。服務(wù)使用者在獲得服務(wù)時,其服務(wù)的實現(xiàn)細節(jié)對服務(wù)使用者是透明的。接口是實現(xiàn)系統(tǒng)之間解耦的有力,提高Java語言中接口的兩種含義:①概念性接口:指系統(tǒng)對外提供的所有服務(wù),在對象中表提供的所有服務(wù),實現(xiàn)了服務(wù)與服務(wù)實現(xiàn)細節(jié)的分離。值得的是,Java中“interface”碑意義。有關(guān)接口定義與使用技術(shù)細節(jié),請見本書第4.6節(jié)(接口。封裝服務(wù),如圖3-2所示。 圖3-2對象的封裝與交 封裝的實現(xiàn):在面向?qū)ο缶幊陶Z言中通過控制來實現(xiàn)封裝,控制機制能控制類protected:具有類域、包域和跨類性,即對同一個類、同一包中的類或者跨包中的(default類公開可見。④private:不對外公開,只具有類域性,即只在同一類內(nèi)部公開可見,訪問級別最低。靈活運用類成員的四種級別可有效地控制對象的封裝程度,有關(guān)控制的詳細介紹,請參見本第4.2節(jié)(控制。繼承(SubclassClassAB的直接父類,BCC繼承了BA屬性和方法。)強大、但復(fù)雜性比單繼承高,要特別注意避免二義性。C++支持單繼承和多繼承;Java不支要的是,由于繼承關(guān)系打破了類的封裝,實際中,為了降低父子類之間的耦合度,和方法不能被子類繼承。有關(guān)繼承的詳細介紹,請參見本第4.3節(jié)(繼承。封裝、繼承和多態(tài)是面向?qū)ο蟮幕咎卣鳎鄳B(tài)與封裝、繼承緊密相關(guān)。Java不支持模型是對現(xiàn)實世界中原型系統(tǒng)的一種抽象和歧義的描述,以反映事物的本質(zhì)特征。系統(tǒng)功能。通常使用統(tǒng)模語言(UnifiedModelingLanguage,UML)提供的類圖、對象·論伯博士UML19966UML0.9。199711術(shù)的標(biāo)準(zhǔn)建模語言。UML中的“UOO建模方法(Booch、OMT和視化UML建模和面向?qū)ο笙到y(tǒng)設(shè)計分析工具和CASE工具。本使用中UML圖均使用MagicDrawUML11.0繪制。類圖(Class,#、~和分別表示公有(public、保護

(a)類 3-3UML(rtctd類類(a)student對象(實例(b)Student3-4UML用例圖(UseCase用例圖用來從用戶角度描述系統(tǒng)的功能,并各功能的操作者。用例圖以可視化方式3-5所示,有學(xué)生、教師3-5可以管理學(xué)生、審定課程和排課順序圖(Sequence3-6所示是選課系統(tǒng)采用會話外觀設(shè)計模式的排課順序圖,客戶端通過網(wǎng)絡(luò),先發(fā)立了Course、TeacherClassroom對象,最后給Course對象指派了教師和分配了教室。

3-6Diagram)協(xié)作圖用來描述對象間的協(xié)作關(guān)序圖包含的信息相同,RationalRose工 圖3-7選課系統(tǒng)的排課協(xié)作戶狀態(tài)圖如圖3-8所示。3-9 圖3-8選課系統(tǒng)的用戶狀態(tài) 圖3-9選課系統(tǒng)的用戶活動包圖(Package3-10所示的soft.ch03包中,有四個類(ClassMethodDemo、ClassVariableDemoInstanceMethodDemo、InstanceVariableDemo)和一個接口(nOunerae構(gòu)件/組件圖(ComponentDiagram)依賴關(guān)系。構(gòu)件圖既可在次顯示粗粒3-11JavaEE企業(yè)級應(yīng)用的

3-10圖3-11JavaEE企業(yè)級應(yīng)用的組件

3-12JavaEE泛化 特 泛 一2.依賴2.依賴3-箭頭”表示,如圖3-14所示。若類A類B的屬性或方法,AB3-實現(xiàn)3-153-15關(guān)聯(lián)則類A中包含有類B類型的屬性。按照類之間(a(b 圖3-16關(guān)聯(lián)關(guān)整體與部分的生命周期可不一樣,UML中用帶

部 整 部 組 整強強 (a)聚合關(guān) (b)組合關(guān) 圖3- ②組合(Combination)關(guān)系:它是強關(guān)系,被的子系統(tǒng)不允許被拆卸和替換,整體與部分的生命周期相同,UML中用帶“實線的實心菱形箭頭”表示,如圖3-17(b)所者有獨立的生命周期;具有關(guān)系(特別是強關(guān)系)的兩個對象,整體對象會制約它Java作為純面向?qū)ο蟪绦蛟O(shè)計語言,Java程序中的數(shù)據(jù)與操作皆封裝在若干類中,最簡JavaJava類,所以說,JavaJava程序的重要特點。種重要的復(fù)合數(shù)據(jù)類型,是Java語言的基礎(chǔ)。[[修飾符class類名[extends父類名implements接口名列表{]]} ]: :3-18①class(類Java編譯器,其后的“<類名>”是一個新建類。類名命名要求首Javaextends可以Javaextends后只能跟一個JavaObject類的子類,它們都直接或間接的繼承了Object類。表中的多個接口間用逗號“,Java4.6[[public][ |final]]①默認(rèn)(default類:無控制符的類,稱為默認(rèn)類。默認(rèn)類只能被同一個包中的類②public(公有類public修飾的類叫公有類,它能被其他所有類所使用,公有類①(抽象類):使用②final(最終類final修飾的類中最終類。最終類不能有子類,故其中的方法不性而不允許用戶隨意修改,如Java標(biāo)準(zhǔn)類庫中的一些底層類。注意:由于final類不能有子類,而類必須被子類繼承,兩者互為,故不能其一般格式如圖3-19所示: ////public|protected|privatestaticfinaltransientvolatile <數(shù)據(jù)類型><變量名列表>[,變量名=<初值>]; [修飾符]<類名><對象名>[=new<構(gòu)造方法名>([實參表]) //[public|protected|private][static]native <返回值類型><方法名>([形式參數(shù)列表] [throws異常列表] [語句序列; }[static][語句序列}}3-19簡單成員變量是指“<數(shù)據(jù)類型>Java基本數(shù)據(jù)類型的變量,其定義格式如圖3-19protected(保護成員變量protected修飾的變量叫保護成員變量,它可被該類默認(rèn)(default成員變量若成員變量無控制符,稱為默認(rèn)控制,則此成員static(靜態(tài)成員變量static修飾的變量叫靜態(tài)成員變量,它的特點是屬于類區(qū)”中的一個公共單元中,只有一個副本,被該類的所有對象共享,任何對象都可以訪員變量的可以使用類名,也可以使用對象。詳細內(nèi)容見3.5節(jié)(類變量與實例變量)值在程序的整個執(zhí)行過程中不能被改變的。最終成員變量的說明格式是:[<修飾符>]final<類型變量名初值>;最終成員變量通常還被說明為static類型。使用符號常量可使程transient(瞬時成員變量)transient修飾的變量叫瞬時成員變量,它不能被串行化,對于需要的變量,可使用瞬時成員變量提高其安全性。類中成員變量在默認(rèn)情況“實例名.3.5節(jié)。Java1)對該類體內(nèi)中必須包含<類型>、<方法名>和一對圓括號,可省略的有[修飾符]、[參數(shù)表]throws及后和非控制修飾符(static、final、、native、synchronized。將在下面的(2”中包括基本數(shù)據(jù)類型和類型(類、接口和數(shù)組。若方法沒有返回值,則用void關(guān)鍵字表示。要的是“構(gòu)造方法”作為一種構(gòu)建類的實例的特定用途的方法,其返回值為該類的方法異常列表:為了提高程序的健壯性和可性,Java采用了面向?qū)ο蟮漠惓L幍脑敿毥榻B見第8章(異常處理機制。方法體是實現(xiàn)該方能的代碼段,它是由一對花括號“{}”括起來的語句序列,其中法沒有被實現(xiàn)。當(dāng)且僅當(dāng)方法的修飾符中有(抽象方法)native(本地方法)時,{}private(私有成員方法private修飾的方法叫私有成員方法,它只能被該類自static(靜態(tài)成員方法/類方法static修飾的方法叫靜態(tài)成員方法,它的特點是何對象都可以它。靜態(tài)成員方法的可以使用類名,也可以使用對象。通常靜態(tài)方法只能處理靜態(tài)變量。詳細內(nèi)容見3.6節(jié)(類方法與實例方法) native(本地成員方法)native修飾的方法叫本地成員方法,它通常用來說明方法體是用其他語言(C、C++、匯編語言等)編寫的特殊方法。本地成員方法只在類體線程共存的程序中的協(xié)調(diào)和同步。詳細內(nèi)容見9.4節(jié)(線程的同步。注意:1)static和不能同時修飾某一個成員方法,即:一個類(靜態(tài))方法不能的具體實例,也不依賴于它的子類,所以當(dāng)前類必須為類方法提供實現(xiàn)。2)final和成員不能被子類方法覆蓋(重寫),而成員方法必須被子類方法重寫并實現(xiàn),兩者互為,故不能用來同時修飾一個成員方法。3)private和不能同時修飾某一個成員結(jié)論:與static、與final、與private在語義互為,所以不能和類型(類、接口和數(shù)組。值得的是,Java的同一個類中可定義多個同名方法,型和類型(類、接口和數(shù)組。若方法沒有返回值,則用void關(guān)鍵字表示。方法的返回值是通過return語句實現(xiàn),其一般格式是:return<表達式>;用超過一條以上的returnreturn語句作為方法的最后一條語句。一種:“實例名.實例方法名([實參列表3.6節(jié)。(的實參值。Java中,復(fù)合類型變量實際上是,并采用動態(tài)聯(lián)編。 又稱為靜態(tài)代碼塊,其的定義格式如圖3-19所示。類代碼塊不存在于任何方法體中。Java【例3-1】驗證類的定義(類修飾符、成員修飾符、成員變量、成員方法、類的實例化(new)、類的組合關(guān)系和成員方法調(diào)用。本實例,首先將“點”抽象(映射)Point類,它由私有成員變量x(橫坐getY()改器(setX()、setY())等構(gòu)成。類,它由成員變量centre(圓心,Point類類型、radius(半getCircleLong等成員方法組成,其中Circlecentre屬性是Point類類型,二者具有組合關(guān)系。最后在E3_1DefineClass主類中先創(chuàng)建了Point類的一個實例p1 圖3-20例3-1的類的狀態(tài)(坐標(biāo)、半徑、面積和周長。例3-1的類圖如圖3-20所示,程序代碼如下:程 3-1: publicclassE3_1DefineClass主類(必為公有類publicstaticvoidmain(Stringargs主方法Pointp1=newPoint();//實例化一個點p1p1.setX(8.0);//設(shè)置點p1的x,y坐標(biāo)值p1.setY(9.0);//調(diào)用p1實例的實例方法setY()Circlec1=newCircle();//實例化一個圓c1c1.setCentre(p1);//以對象p1為實參,點p1作為圓c1的圓心c1.setRadius(1.0);//設(shè)置圓c1的半徑值System.out.println("圓心(x,yc1.getCentre().getX()+c1.getCentre().getY()+先用圓c1的實例方法getCentre()取得圓心,再用圓心的getX()和getY()取得x,y坐標(biāo)值System.out.println("圓的半徑="+c1.getRadius());//調(diào)用實例方法System.out.println("圓的面積="+c1.getArea());System.out.println("圓的周長}}classPoint點類的定義(默認(rèn)類privatedoublex點的x坐標(biāo)(私有變量privatedoubley點的y坐標(biāo)(私有變量publicdoublegetX(){returnx;}//x坐標(biāo)的器(公有方法)publicvoidsetX(doublex){this.x=x;}//x坐標(biāo)的修改器publicdoublegetY(){returny;}publicvoidsetY(doubley){this.y=y;}classCircle圓類的定義(默認(rèn)類finalstaticdoublePI PI常量(最終類變量publicPointgetCentre(){returncentre;}//圓心器(公有方法publicvoidsetCentre(Pointcentre){this.centre=centre;}//圓心publicdoublegetRadius(){returnradius;publicvoidsetRadius(doubleradius){this.radius=radius;publicdoublegetArea計算圓的面積(公有方法}publicdoublegetCircleLongreturn2*Circle.PI*radius}圓心(x,y圓的半徑圓的面積圓的周長3-213-2程程 3-2:packagepublicclassE3_2ParameterDemopublicstaticvoidmain(Stringargs[])E3_2ParameterDemoe3_2PD=newAa1new Bb1new Cc1;//接口C的c1,接口不能實例化,只能接口的變量c1=newD();//創(chuàng)建類D的實例并賦值給接口C的c1////賦值相容二:實參為形參的同類對象(實參對象b1是形參B類類型的同類對象)e3_2PD.m2(b1);//調(diào)用方法m2(),修改了對象實參b1的mvb屬性值//////e3_2PD.m2((B)//e3_2.Acannotbecasttoa1=e3_2PD.m3();//調(diào)用實例e3_2PD的實例方法m3(),返回類A的對象并賦值給a1Dd1=e3_2PD.m4();//調(diào)用實例e3_2PD的實例方法m4(),返回類D的對象并賦值給+d1.arithmeticOperate((int)1.0,(int)1.0,c1=e3_2PD.m5();//調(diào)用實例e3_2PD的實例方法m5(),返回接口C的并賦值給+c1.arithmeticOperate(1+2,1+2,//此處的實參d1所屬類D實現(xiàn)了接口C,屬雙向傳+e3_2PD.m6(d1,10,10,}voidm1(Ainaina.mA1形參為Avoidm2(Binb形參為BSystem.out.println("類Bmvbinb.getMvb());}//Am3(){returnnewB();//Dm4(){returnnewD();若返回類型為接口,則返回的數(shù)據(jù)類型必須實現(xiàn)該接口,此處類D實現(xiàn)了接口CCm5(){returnnewD();}intm6(CincintinxintinyStringop形參inc為接口C}}classA類}classBextendsA類B繼承類A,其中mA1()方法被類BprivateintpublicintgetMvb(){returnmvb;publicvoidsetMvb(intmvb){this.mvb=mvb;}interfaceC接口 intarithmeticOperate(intx,inty,String}classDimplementsC類D實現(xiàn)接口publicintarithmeticOperate(intx,inty,Stringop)intz0zif(op.equals("+"))z=x+y;elseif(op.equals("-"))z=x-y;elseif(op.equals("*"))z=x*y;elseif(op.equals("/"))z=x/y;return}}第一次調(diào)用e3_2PD.m2(b1):類B實例的成員變量mvb=0第二次調(diào)用e3_2PD.m2(b1):類Bmvb100d1.arithmeticOperate(10,10,+)=2c1.arithmeticOperate(1+2,1+2,*)=9e3_2PD.m6(d1,10,10,/)=1用new運算符創(chuàng)建對象的一般格式是:<類名對象名>=new<類的構(gòu)造方法名參數(shù)列表程 3-3: publicstaticvoidmain(String[]args)Accountsaccount1=newAccounts();//實例化默認(rèn)帳號account1.showAccounts();//查看帳號account1.setAccounts("1001","劉",10000);//設(shè)置帳號account1.showAccounts();//查看帳號Accountsaccount2=newAccounts("1002","",100000);account2.showAccounts();//查看帳號}}classAccounts{//定義帳號類privateStringaID;//帳號privateStringaName;//privatedoublesaving存款}publicAccounts(StringaID,StringaName,doublesaving)this.aID=aID;this.aName=aName;this.saving=saving;}publicvoidsetAccounts(StringaID,StringaName,doublesaving)this.aID=aID;this.aName=aName;this.saving=saving;}publicvoidshowAccountsSystem.out.println("帳號:"+aID+"\t:"+aName+"\t存款:"+}}存款::<類名對象名列表<對象名>=new<構(gòu)造方法名>([實參列表]]) <類名><對象名>=new<構(gòu)造方法名>([實參列表 3-22型對象的變量,其本身是一個基本類型的變量,此時對象變量還未具體的對象,顯Students1,s1=news2=new ","","男","1971-12-11","02級計科1班的成員變量進行初始化,新建對象的賦值給s2。常將返回的這個值賦給類型相容的對象名,此對象實際上是對象(地址。因此,在Java中,使用已知類創(chuàng)建的對象實際上是對象。new運算符主要完成兩項操作。①為對象分配空間,從嚴(yán)格意義上講,它是為每個的不同對象所擁有的成員方法的代碼都是一樣的,所以為了節(jié)省空間,所有對象共程 3-3: publicclassCreateObjectDemo{//Employee類的三個成員為三個對象Employeee1;EmployeeEmployeee3=newEmployee("0003","",2500.00,"2007-04-e1=newSystem.out.println("給e1的成員賦值e1.getEIDt+"\t"+e1.getESalary()+"\t"+e2=newEmployee("0002","",3500.00,"2007-05-e1e2System.out.println("將e2賦值給e1后e1.getEIDt"+"\t"+e1.getESalary()+"\t"+}publicstaticvoidmain(String[]args)//new}}classEmployee{//自定義雇員類privateStringeID;//工號privateStringeName;//privatedoubleeSalary薪水StringeHireDaySystem.out.println("eIDteNameteSalaryt}this.eID=this.eName=this.eSalary=this.eHireDay=System.out.println("創(chuàng)建初始化雇員:eIDteNameteSalaryt}publicStringgetEID(){returneID;}publicvoidsetEID(Stringeid){eID=eid;}publicStringgetEName(){returneName;}publicvoidsetEName(Stringname){eName=name;publicdoublegetESalary(){returneSalary;publicvoidsetESalary(doublesalary){eSalary=salary;}0.0 3500.0 05- 3500.02007-05-20爾型變量默認(rèn)值為false;型變量的默認(rèn)值為null。Employeee3=newEmployee("0003","",2500.00,"2007-04-Employeee1=new實際上,對對象的操作是對對象成員的操作。對象成員使用點“.”運算符來實現(xiàn)表示,其一格式是:<對象名>.<成員名>其中,<成員名>包括成員方法名和成員變量名。要的是對象成員會受到控制符的限制而不直接,例如為了提高封裝性,一般情況下成員變量被private修飾而不能使用“<對象名>.<成員名>”方式來,只能通過其對外公開的接口,如public類型的器和修改器來間接操作。()是用來改變已有的值。由于對象實際上是型的變量。將一個對象賦值給另一個對象時,在【例3-3】中,同類對象直接賦值如:e1=e2;賦值后e1與e2的是內(nèi)存中的同3-3CreateObjectDemoe1,e2,e3Employee的對象引Employeee3=newEmployee("0003","",2500.00,"2007-04-程 3-4: publicstaticvoidmain(Stringargs//調(diào)用類方法getStudent(),創(chuàng)建并返回一個對象s1Students1=Student.getStudent();s1.setStudent(s1,"001","",98);//調(diào)用類方法getStudent(),創(chuàng)建并返回一個對象s2Students2=Student.getStudent();s1.setStudent(s2,"002","",88);}}classStudent{//類StudentprivateStringsNo;//學(xué)號privateStringsName;//privatedoublesScore//對象作為方法的形publicvoidsetStudent(Students,StringsNo,StringsName,doublesScore){s.sNo=sNo;s.sName=sName;s.sScore=sScore;}staticpublicStudentgetStudent類(靜態(tài))方法,其返回對象returnnew}publicvoidshowStudent(Students){//對象作為方法的形System.out.println("學(xué)號:"+s.sNo+"\t:"+s.sName+"\t成績:"+} :成績:98.0 :成績對象可以作為方法的返回值,該方法是類類型。Java中,方法的類型可以是簡單類型,方法main(Stringargs[])中,便使用了String類的對象數(shù)組args[]作方法參數(shù)。程 3-5: publicclassObjcetArrayDemopublicstaticvoidmain(String[]args)doublesum=ScorescorenewScore[5for(inti0iscore.lengthiscore[i]=newScore(i+1,(int)(Math.random()*10)+1,.round(Math.random()*100));score[i].showScore輸出對象數(shù)組元素值score[i]=null;//及時清除對象,以便回收器回}}}classScoreprivateintsno;//學(xué)號privateintcno;//課程號privatedoublescore成績publicScore(intsnointcnodoublescorethis.sno=o=this.score=}publicvoidshowScoreSystem.out.println("學(xué)號snot課程號cnot成績}publicdoublegetScorereturnscore}學(xué)號:1課程號:7成績:33.0學(xué)號:2課程號:8成績:39.0學(xué)號:3課程號:4成績學(xué)號:4課程號:10 學(xué)號:5課程號:6成績:74.0Students1,3-23s1=newStudent(" ","");s2=3-23其中,s1是型變量,內(nèi)容s2s1s1所指示淺

圖3-24例3-1的類深 Java提供了一個Cloneable接口用來支持淺和深方式的對象克隆。若希望某行重寫,其克隆的格式類似于:c2=(Circle)c1.clone(),要的是clone()返回的是Object實現(xiàn)Cloneable接口只是通知Java編譯器該類對象可以被,而具體實現(xiàn)過程是由然后再顯式地創(chuàng)建該類中子對象的拷貝。若所有對象都實現(xiàn)了Cloneable接口,只要簡單地調(diào)用clone()方法就可以實現(xiàn)對象的完全。對于需要深的對象,建議其子類對象都實現(xiàn)Cloneable接口。Java提供了自動內(nèi)存管理能力,可以自動釋放掉不再被使用的對象。在JavaObjectprotectedvoidfinalize(Javafinalize()方法,在這個方對象的finalize()方法。若在程序終止這前回收器始終沒有執(zhí)行回收操作,則回收器將始終不會調(diào)用無用對象的finalize()方法。Java虛擬機的回收操作對程序完全是透明的,因此程序無法預(yù)料某個無用對象的finalize()方法何時被調(diào)用。此外,除非回收器認(rèn)為程序需要額外的內(nèi)存,否則它不會試所以不能保證無用對象的finalize()方法一定被調(diào)用。對象,它的內(nèi)存可以被回收,如【3-5】中的“score[i]=null;”語句。Java語言不支持不屬于任何類的全局變量,而使用類變量在一定程度上支持全局變量,Java虛擬機在首次加載某類時,能根據(jù)類名在為類變量在運行時數(shù)據(jù)區(qū)中的“方法區(qū)”【例3-6】同一類中,可在任何方法內(nèi)直接類(靜態(tài))變量:不同類中,可通過某程 3-6: publicclassClassVariableDemopublicstaticvoidmain(String[]{ClassVariablecv1=newClassVariable();ClassVariablecv2=newSystem.out.println("cv1.add(100)="+cv1.add(100));System.out.println("cv2.subtract(10)="+cv2.subtract(10));System.out.println("cv1.ID="+cv1.ID);System.out.println("cv2.ID="+}}classClassVariablestaticintIDintadd(inti){returnID+=i;}//同一類中,實例方法可直接類變staticintsubtract(inti){returnID-=i;}//同一類中,類方法可直接類變}cv1.add(100)=cv2.subtract(10)=cv1.ID=cv2.ID=ClassVariable.ID=【例3-7】同一類中,實例方法可直接實例(非靜態(tài))變量,而類方法只能通過實例方能實例變量:在不同類中,只能通過實例來 程 3-7: publicstaticvoidmain(String[]args)InstanceVariableiv1=newInstanceVariable();//創(chuàng)建一個實例InstanceVariableiv2=newInstanceVariable();//創(chuàng)建一個實例System.out.println("iv1.add(100)="+iv1.add(100));System.out.println("iv2.subtract(iv2,100iv2.subtract(iv2100));//只能用:"實例.類變量"方式實例變量System.out.println("iv1.IDiv1.ID);System.out.println("iv2.ID//System.out.println("InstanceVariable.ID="+}}intIDintadd(inti){//同一類中,實例方法可直接實例變returnID+=}staticintsubtract(InstanceVariableiv,inti)//returnID-=returniv.ID-=}}iv1.add(100)=iv1.ID=iv2.ID=-1)類方法可以直接其所屬類的類變量和類方法;2)類方法不能直接其所屬類main()this關(guān)鍵字(this代表類的當(dāng)前實例,由其調(diào)用的均為實例變量和實例【例3-8】同一類中,類方法可直接調(diào)用類方法和類變量,要通過實例才能調(diào)用實程 3-8: //publicstaticvoidmain(String[]ClassMethodcm1newClassMethod//ClassMethod.SetIDName(100,"");cm1.SetIDName(100,"");ClassMethodcm2newClassMethod實例化cm2cm2.SetIDName(108,"");}}staticintIDvoidSetIDName(intID,Stringthis.ID }staticvoidgetIDName(ClassMethod{System.out.print("ID="+//System.out.print("Name="+//System.out.print("Name="+);System.out.print("\nName="++"\n");}staticvoidprintIDName(ClassMethodim)//SetIDName(1000,"}}ID=Name=nullID=100Name=ID=108Name=注意:1)main()staticmain()方法定義為靜態(tài)方法,可以使得Javamain()main()方法,而無須先創(chuàng)建這個類的【例3-9】同一類中,實例方法可直接實例變量與類變量、實例方法與類方法,而程 3-9: publicclassInstanceMethodDemopublicstaticvoidmain(String[]{InstanceMethodim1=newInstanceMethod();im1.SetIDName(100,"");//InstanceMethod.printIDName(im1);InstanceMethodim2=newInstanceMethod();im2.SetIDName(108,"");}}classstaticintID類變量Stringname;//實例voidSetIDName(intID,String{this.ID=ID;//類變=name;//實例變} staticvoidgetIDName(InstanceMethodim) System.out.print("ID="+//System.out.print("Name="+//System.out.print("Name="+);System.out.print("\nName="++"\n");}}}ID=Name=ID=108Name=包同程序間類的重用。Java語言為程序員提供了自行定義包的機制。名不能重名,不同包中的類名可以重名,解決了類和接口名問題。②控制類之間:包是一個域,對包中的類的有保護作用。例如,若類被public修飾,則該類不僅可供同一包中的類,也可以被其他包中的類。若類無修飾符,則該類同一包中的類??刂频脑敿毥榻B見4.2節(jié)(控制。③有助于劃分和組織Java應(yīng)用javax.xml等包,稱為基礎(chǔ)(標(biāo)準(zhǔn))類庫。每個包中包含了許多有用的類和接口。用戶也可以Java的基礎(chǔ)類庫其實就是JDK安裝 java.util、、java.sql等。包是JVM自動引入的包。?java.awt(WindowsToolkit,AWT)包中包含了用于構(gòu)建GUI界面的類及繪圖類。類及java.sql包:支持?jǐn)?shù)據(jù)庫操作,包含DriverManager(驅(qū)動程序管理)類和JDK標(biāo)準(zhǔn)類庫中的類可以提高軟件復(fù)用率、編程效率和軟件質(zhì)量。軟件復(fù)用是提高Java中,類是創(chuàng)建對象的模板,對象是類的實例,對象復(fù)用體現(xiàn)為類的重用。Java源程序由五個基本部分構(gòu)成:①一個包(package)說明語句(可選用的包。③若干接口(可選項。④一個public的類。在一個源文件中只能有一個public類。⑤若干個屬于本包的(無public飾符)類(可選項。其一般形式如下:package包名; import所要導(dǎo)入的類庫; interface接口名{…… publicclass類名{…… class類名{… 語句來創(chuàng)建包。package語句缺省時,則使用源程序文件所在文件夾名作為默認(rèn)包。默認(rèn)包 程序3-10: publicclassPackageDemopublicstaticvoidmain(Stringargs[])inta=5,b=Mathmath=newMath();//對同一包中的類Math實例化System.out.println("math.add("+a+","+b+")="+math.add(a,b));}}classMathpublicdoubleadd(doublex,doubley){returnx+y;}publicdoublesubtract(doublex,doubley){returnx-y;}publicdoublemultiply(doublex,doubley){returnx*y;}publicdoubledivide(doublex,doubley){returnx/y;}}math.add(5,5)=math.subtract(5,5)=math.multiply(5,5)=math.divide(5,5)=③編譯方法:D:\JPT>javacdPackageDemo.javaJPT方法一 soft.ch03.PackageDemo方法二:D:\>java-classpath soft.ch03.PackageDemo(2)一個包中的多個類,如importjava.awt.*。更確切的說,它并不是java.awt中的所有類,而只定義為public的類,并且只被代碼的類,所以這“*”號代替類名,在不能代替包名,如importjava.awt.*,只java.awt下的類,而不java.awt下的包;import只告訴編譯器及解釋器哪里可以找到類、變量、方法的定義,而并沒有將如果要使用的類是屬于java.lang包的,那么可以直接使用類名來指定的類,而不需要加上包名,因為包java.lang不用顯示使用import,它是缺省引入的;如果要使用的類在其它包(java.lang除外)中,那么可以通過包名加上類名來引用該類,如java.awt.Font;(import程 3-11: publicclassPackageDemopublicstaticvoidmain(Stringargs[])inta=5,b=Mathmath=newMath();//對不同包中的public類Math實例化System.out.println("math.add("+a+","+b+")="+math.add(a,b));}} publicdoubleadd(doublex,doubley){returnx+y;}publicdoublesubtract(doublex,doubley){returnx-y;}publicdoublemultiply(doublex,doubley){returnx*y;}publicdoubledivide(doublex,doubley){returnx/y;}}math.add(5,5)=math.subtract(5,5)=math.multiply(5,5)=math.divide(5,5)= d:\jptjavacdMyFirst.java←┘//“.編譯結(jié)果是:d:\jpt\com\comsoft\ch03\MyFirst.class//設(shè)其中只定義了一個類 d:\jpt> 運行方法二:若當(dāng)前為非主時,則要用classpath指明類的主,并使d:\>javaclasspath “jar.exe(壓縮成一個JAR文件(JAR包,實現(xiàn)發(fā)布整個程序或類庫。3-11】的soft.ch03PackageDemoMath為例說明JAR包的創(chuàng)建和運行方法。①在被打包的類所處的文件夾“E:\JPT\JBuilder2007\CH03\bin”中,編寫文件 E:\JPT\JBuilder2007\CH03\bin>jarcfmpackagedemo.jarMANIFEST.MF-C.com表示文件的名字。(2)“-C.com”表示當(dāng)前(E:\JPT\JBuilder2007\CH03\bin,此處用“.”表示)下所有以“com”打頭的文件,要特別的是“-C”中的“”不能“”,此處“com”表示所有以“comDOS命令中,包名間的隸屬符號“.”用“/”或“\”替換,如“soft.ch03”可用“com\

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論