第三類與對(duì)象_第1頁(yè)
第三類與對(duì)象_第2頁(yè)
第三類與對(duì)象_第3頁(yè)
第三類與對(duì)象_第4頁(yè)
第三類與對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三類與對(duì)象1第1頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月主要內(nèi)容1、面向?qū)ο蟮母拍?、面向?qū)ο蟮幕咎卣?、類,變量,數(shù)據(jù)成員與方法4、對(duì)象的創(chuàng)建,初始化5、static,final變量及方法6、方法重載7、This關(guān)鍵字8、對(duì)象的回收9、包10、Java基礎(chǔ)類庫(kù)(教材4.6.1)11、類的訪問(wèn)控制參考thinkinginjava第一,四,五章教材第二章,第四章4.6節(jié)包的應(yīng)用2第2頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月1、面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟮某绦蛟O(shè)計(jì)與結(jié)構(gòu)化程序設(shè)計(jì)方法相比,更符合人類認(rèn)識(shí)現(xiàn)實(shí)世界的思維方式已成為程序設(shè)計(jì)的主流方向涉及的主要概念封裝繼承多態(tài)3第3頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月現(xiàn)實(shí)世界中萬(wàn)物皆對(duì)象都具有各自的屬性(名詞),對(duì)外界都呈現(xiàn)各自的行為(動(dòng)詞)程序中一切都是對(duì)象都具有標(biāo)識(shí)(identity),屬性和行為(方法)通過(guò)一個(gè)或多個(gè)變量來(lái)保存其狀態(tài)通過(guò)方法(method)實(shí)現(xiàn)他的行為1.1 對(duì)象4第4頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月例:鐘表數(shù)據(jù)(屬性)intHour;intMinute;intSecond;方法(行為)SetTime();ShowTime();5第5頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月例:學(xué)生數(shù)據(jù)(屬性)Stringname;intID;intEng;intMath;方法(行為)統(tǒng)計(jì)成績(jī)

getEng(),getMath()getTotal()6第6頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月將屬性及行為相同或相似的對(duì)象歸為一 類。類可以看成是對(duì)象的抽象,代表了此類對(duì)象所具有的共有屬性和行為??梢詫F(xiàn)實(shí)生活中的對(duì)象經(jīng)過(guò)抽象,映射為程序中的對(duì)象。對(duì)象在程序中是通過(guò)一種抽象數(shù)據(jù)類型來(lái)描述的,這種抽象數(shù)據(jù)類型稱為類(Class)。對(duì)象是類的具體實(shí)例。1.2 類7第7頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月例如:類Car及Car的對(duì)象Car的對(duì)象們:CarredCar=newCar();CargreenCar=newCar()CaryellowCar=newCar();……redCar.brake();greenCar.speedUp();ClassCar{intcolor_number;intdoor_number;intspeed;

voidbrake(){…}voidspeedUp(){…}voidslowDown(){…}}

抽象數(shù)據(jù)類型Car8第8頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月2 面向?qū)ο蠡咎卣鞣庋b:將對(duì)象的數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起封裝定義程序如何引用對(duì)象的數(shù)據(jù),封裝實(shí)際上使用方法將類的數(shù)據(jù)隱藏起來(lái),控制用戶對(duì)類的修改和訪問(wèn)數(shù)據(jù)的程度。私有數(shù)據(jù)方法方法數(shù)據(jù)對(duì)象A對(duì)象B公有數(shù)據(jù)9第9頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月繼承是指新的類可以獲得已有類(稱為超類、基類或父類)的屬性和行為,稱新類為已有類的派生類(也稱為子類)在繼承過(guò)程中派生類繼承了基類的特性,包括方法和實(shí)例變量派生類也可修改繼承的方法或增加新的方法,使之更適合特殊的需要有助于解決軟件的可重用性問(wèn)題,使程序結(jié)構(gòu)清晰,降低了編碼和維護(hù)的工作量10第10頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月TypeBrandTypeBrandHornTypeBrandEngineAirbagTypeBrandSeatsVehicleBicycleMotoVehicleAirplane11第11頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月多態(tài)一個(gè)程序中同名的不同方法共存主要通過(guò)子類對(duì)父類方法的覆蓋來(lái)實(shí)現(xiàn)不同類的對(duì)象可以響應(yīng)同名的消息(方法),具體的實(shí)現(xiàn)方法卻不同使語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好地解決了應(yīng)用程序方法同名問(wèn)題12第12頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月3、類,變量,數(shù)據(jù)成員及方法

——3.1類的聲明聲明形式

[public][abstract|final]class

類名稱

[extends

父類名稱][implements

接口名稱列表] {

數(shù)據(jù)成員聲明及初始化;

(field,constructor)

方法聲明及方法實(shí)現(xiàn);

(methoddeclaration) }classCar{ intcolor_number; intdoor_number; intspeed;

voidbrake(){…} voidspeedUp(){…} voidslowDown(){…} }

}13第13頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月關(guān)鍵字Class表明其后聲明的是一個(gè)類。extends如果所聲明的類是從某一父類派生而來(lái),那么,父類的名字應(yīng)寫(xiě)在extends之后implements如果所聲明的類要實(shí)現(xiàn)某些接口,那么,接口的名字應(yīng)寫(xiě)在implements之后14第14頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月修飾符可以有多個(gè),用來(lái)限定類的使用方式public表明此類為公有類abstract指明此類為抽象類final指明此類為終結(jié)類 類聲明體數(shù)據(jù)成員聲明及初始化可以有多個(gè)方法聲明及方法實(shí)現(xiàn)可以有多個(gè)15第15頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月例:鐘表類Clock.javapublicclassClock{//成員變量

inthour; intminute; intsecond;//成員方法

publicvoidsetTime(intnewH,intnewM,intnewS){ hour=newH; minute=newM; second=news;}publicvoidshowTime(){ System.out.println(hour+":"+minute+":"+second);}}16第16頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月變量除了存儲(chǔ)基本數(shù)據(jù)類型的數(shù)據(jù),還能存儲(chǔ)引用類型的變量3.2 變量及數(shù)據(jù)成員17第17頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月數(shù)據(jù)成員(也稱為成員變量)表示Java類中的數(shù)據(jù)變量聲明數(shù)據(jù)成員必須給出變量名及其所屬的類型,同時(shí)還可以指定其他特性在一個(gè)類中成員變量名是唯一的數(shù)據(jù)成員的類型可以是Java中任意的數(shù)據(jù)類型(基本數(shù)據(jù)類型,類,接口,數(shù)組)18第18頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月聲明格式

[public|protected|private] [static][final] 變量數(shù)據(jù)類型變量名1[=變量初值], 變量名2[=變量初值],…;

staticintsum=7; privateStringgardenName; privateFruitbanana;

……格式說(shuō)明Public,protected,private為訪問(wèn)控制符,static指明這是一個(gè)靜態(tài)成員變量(類變量)final指明變量的值不能被修改19第19頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月3.3 方法方法是在類中定義,用來(lái)實(shí)現(xiàn)對(duì)象操作的函數(shù)。聲明格式

[public|protected|private]

[static][

final][abstract][synchronized]

返回類型方法名([參數(shù)列表])[throwsexceptionList] {

方法體 }返回類型可以是任意的Java數(shù)據(jù)類型,當(dāng)一個(gè)方法不需要返回值時(shí),返回類型為void。20第20頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月參數(shù)的類型可以是簡(jiǎn)單數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型(數(shù)組、類或接口),傳遞方式都是采用傳值的方式完成,也就是,對(duì)參數(shù)值的任何改動(dòng)都只限于這個(gè)方法的作用域內(nèi)。方法體是對(duì)方法的實(shí)現(xiàn)。它包括局部變量的聲明以及所有合法的Java指令。局部變量的作用域只在該方法內(nèi)部。21第21頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月一個(gè)簡(jiǎn)單的類:類的定義放在Car.java里,測(cè)試代碼放入CarDemo.java里,運(yùn)行時(shí),這兩個(gè)文件放在同一目錄下?;蛘邇啥未a放在同一文件CarDemo.javaclassCar{intcar_number;voidset_number(intcar_num){car_number=car_num;}voidshow_number(){System.out.println(“MycarNo.is:”+car_number);}}classCarDemo{publicstaticvoidmain(Stringargs[]){CarDemoCar=newCar();DemoCar.set_number(3456);DemoCar.show_number();}}MycarNo.is:345622第22頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月或者把main()也放入Car類里,文件名為Car.java,適用于代碼少的程序。publicclassCar{intcar_number;voidset_number(intcar_num){car_number=car_num;}voidshow_number(){System.out.println(“MycarNo.is:”+car_number);}publicstaticvoidmain(Stringargs[]){ CarDemoCar=newCar(); DemoCar.set_number(3838); DemoCar.show_number();}}23第23頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月4、對(duì)象的創(chuàng)建,初始化對(duì)象的創(chuàng)建與C++類似,同樣的Java也提供了構(gòu)造方法(constructor)在對(duì)象創(chuàng)建時(shí)被自動(dòng)調(diào)用,進(jìn)行對(duì)象初始化。24第24頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月4.1 對(duì)象的創(chuàng)建對(duì)象的聲明格式

類名變量名例如Car是已經(jīng)聲明的類名,則下面語(yǔ)句聲明了一個(gè)CarDemo對(duì)象(也叫做實(shí)例)

CarCarDemo;

25第25頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月對(duì)象的創(chuàng)建生成實(shí)例的格式:

new<類名>()

例如:CarDemo=newCar()或者聲明與創(chuàng)建合為一步:

CarCarDemo=newCar();

其作用是:在內(nèi)存中為此對(duì)象分配內(nèi)存空間返回對(duì)象的引用(reference,相當(dāng)于對(duì)象的存儲(chǔ)地址)引用變量的初值為null,也可以被賦以空值例如:CarDemo=null;見(jiàn)例:CircumferenceTest.java26第26頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月4.2 對(duì)象的初始化

(ObjectInitialization)與C++相似,新創(chuàng)建對(duì)象的初始化是通過(guò)構(gòu)造方法(constructor)來(lái)完成27第27頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月4.2.1 構(gòu)造方法定義構(gòu)造方法與C++的構(gòu)造函數(shù)相似是一種和類同名的特殊方法在創(chuàng)建對(duì)象時(shí)進(jìn)行初始化(對(duì)成員變量賦初值)Java中的每個(gè)類都有構(gòu)造方法,用來(lái)初始化該類的一個(gè)新的對(duì)象沒(méi)有定義構(gòu)造方法的類,系統(tǒng)自動(dòng)提供默認(rèn)的構(gòu)造方法28第28頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月構(gòu)造方法的特點(diǎn)方法名與類名相同沒(méi)有返回類型,修飾符void也不能有通常被聲明為公有的(public)可以有任意多個(gè)參數(shù)主要作用是完成對(duì)象的初始化工作不能在程序中顯式的調(diào)用在生成一個(gè)對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類的構(gòu)造方法為新生成的對(duì)象初始化一個(gè)帶有構(gòu)造方法的Cat類

例:MyConstructor.java29第29頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月StringtoString()StringtoString()是一個(gè)經(jīng)常用到的方法,當(dāng)需要把一個(gè)對(duì)象輸出到屏幕,就要用到此方法.實(shí)際上,Java的所有類都有一個(gè)默認(rèn)的toString(),例如System.out.println(newTime)就等價(jià)于System.out.println(newTime.toString);如果直接調(diào)用默認(rèn)的toString(),返回結(jié)果形式為: 對(duì)象類的名字@對(duì)象的地址。 見(jiàn)例:TimeStamp.java30第30頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月編譯后運(yùn)行結(jié)果如下:TimeStamp@7d772e解釋@之后的數(shù)值為對(duì)象newTime所指的存儲(chǔ)地址。31第31頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月如果自己重寫(xiě)TimeStamp.java,將對(duì)象的內(nèi)容轉(zhuǎn)換為字符串,再輸出到屏幕。見(jiàn)例:TimeStamp2.java可見(jiàn),使用toString()簡(jiǎn)化了代碼,不必再用多個(gè)println把對(duì)象的數(shù)據(jù)一一打印出來(lái)。另例:一個(gè)帶有constructor的Student.java聲明toString時(shí)需要注意以下幾點(diǎn):toString()必須為public;返回類型為String;方法的名稱必須為toString,且沒(méi)有參數(shù);在方法體中不要使用輸出方法System.out.println();32第32頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月1)系統(tǒng)提供的默認(rèn)構(gòu)造方法如果在類的聲明中沒(méi)有聲明構(gòu)造方法,則Java編譯器會(huì)提供一個(gè)默認(rèn)的構(gòu)造方法默認(rèn)的構(gòu)造方法沒(méi)有參數(shù),其方法體為空4.2.2 構(gòu)造方法種類

33第33頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月聲明一個(gè)銀行帳號(hào)類BankAcount存于文件BankAccount.java,及測(cè)試代碼BankTester,放于BankTester.java,這兩個(gè)文件放在同一個(gè)路徑下。

public

classBankAccount{//BankAccount.java String

ownerName;int

accountNumber;floatbalance;}publicclassBankTester{//BankTester.javapublicstaticvoidmain(Stringargs[]){

BankAccountmyAccount=newBankAccount();

System.out.println("ownerName="+ myAccount.ownerName);System.out.println("accountNumber="+myAccount.accountNumber); System.out.println("balance="+myAccount.balance); }}運(yùn)行結(jié)果ownerName=nullaccountNumber=0balance=0.034第34頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月2)以上的例子在設(shè)計(jì)上有不妥之處,容易創(chuàng)建一個(gè)無(wú)ID的銀行賬號(hào),所以應(yīng)當(dāng)為它提供一個(gè)帶參數(shù)的構(gòu)造方法。為BankAccount聲明一個(gè)有三個(gè)參數(shù)的構(gòu)造方法publicBankAccount(StringinitName,intinitAccountNumber,floatinitBalance){ownerName=initName;accountNumber=initAccountNumber;balance=initBalance;}35第35頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月而在main里就可以用來(lái)初始化對(duì)象:publicclassBankTester{ publicstaticvoidmain(Stringargs[]){ BankAccountmyAccount=newBankAccount(“Wu”,01123,300);….}思考:如果對(duì)象初始化值不是如上說(shuō)示的硬設(shè)入程序,程序應(yīng)該怎樣接收從外界,如鍵盤(pán)的用戶輸入?36第36頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月構(gòu)建一個(gè)Bush類,有兩個(gè)帶參數(shù)的構(gòu)造方法classBush{ Bush(inti){}Bush(inti,doubled){}}如果寫(xiě):newBush();

編譯器將要告訴你找不到對(duì)應(yīng)的構(gòu)造方法說(shuō)明用戶在進(jìn)行類聲明時(shí),如果沒(méi)有聲明任何構(gòu)造方法,系統(tǒng)會(huì)賦給此類一個(gè)默認(rèn)(無(wú)參)的構(gòu)造方法。但是,只要用戶聲明了構(gòu)造方法,即使沒(méi)有聲明無(wú)參的構(gòu)造方法,系統(tǒng)也不再賦默認(rèn)的構(gòu)造方法在聲明構(gòu)造方法時(shí),好的聲明習(xí)慣是不聲明構(gòu)造方法如果聲明,至少聲明一個(gè)無(wú)參構(gòu)造方法37第37頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月5、Static,final變量及方法

Static:(靜態(tài))類變量和(靜態(tài))類方法與C++一樣,類中有一種特殊的成員或方法,它不屬于某個(gè)對(duì)象,不能通過(guò)某個(gè)對(duì)象來(lái)引用,在聲明前加上static38第38頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月1、static變量 可以被所有的對(duì)象共享,生命周期從創(chuàng)建開(kāi)始到程序運(yùn)行結(jié)束。相當(dāng)于C語(yǔ)言中全局變量的作用。其它類可以不用通過(guò)創(chuàng)建該類的實(shí)例,直接通過(guò)類名訪問(wèn)它們。例:MelonEx.javaobjectachardataobjectcchardataObjectbchardatastaticintshare_dataobjectdchardata39第39頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月不正確的引用classStaticError{Stringmystring=“hello”;publicstaticvoidmain(Stringargs[]){System.out.println(mystring);}}編譯時(shí)錯(cuò)誤信息:nonstaticvariablemystringcannotbereferencedfromastaticcontext“System.out.println(mystring);”。為什么不正確:只有對(duì)象的方法可以訪問(wèn)對(duì)象的變量。40第40頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月解決的辦法1.將變量改成static變量classNoStaticError{

staticStringmystring=“hello”;publicstaticvoidmain(Stringargs[]){System.out.println(mystring);}}思考:如果NoStaticError類與main()分別存在兩個(gè)不同文件里,在main()里應(yīng)該怎樣調(diào)用mystring?41第41頁(yè),課件共46頁(yè),創(chuàng)作于2023年2月2.先創(chuàng)建一個(gè)類的對(duì)象,然后用對(duì)象來(lái)調(diào)用。classNoStaticError{Stringmystring=“hello”;publicstaticvoidmain(Stringargs[]){

NoStaticErrornoError;noError=newNoStat

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論