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

下載本文檔

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

文檔簡介

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

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

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

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

——3.1類的聲明聲明形式

[public][abstract|final]class

類名稱

[extends

父類名稱][implements

接口名稱列表] {

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

(field,constructor)

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

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

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

}13第13頁,課件共46頁,創(chuàng)作于2023年2月關(guān)鍵字Class表明其后聲明的是一個類。extends如果所聲明的類是從某一父類派生而來,那么,父類的名字應(yīng)寫在extends之后implements如果所聲明的類要實現(xiàn)某些接口,那么,接口的名字應(yīng)寫在implements之后14第14頁,課件共46頁,創(chuàng)作于2023年2月修飾符可以有多個,用來限定類的使用方式public表明此類為公有類abstract指明此類為抽象類final指明此類為終結(jié)類 類聲明體數(shù)據(jù)成員聲明及初始化可以有多個方法聲明及方法實現(xiàn)可以有多個15第15頁,課件共46頁,創(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頁,課件共46頁,創(chuàng)作于2023年2月變量除了存儲基本數(shù)據(jù)類型的數(shù)據(jù),還能存儲引用類型的變量3.2 變量及數(shù)據(jù)成員17第17頁,課件共46頁,創(chuàng)作于2023年2月數(shù)據(jù)成員(也稱為成員變量)表示Java類中的數(shù)據(jù)變量聲明數(shù)據(jù)成員必須給出變量名及其所屬的類型,同時還可以指定其他特性在一個類中成員變量名是唯一的數(shù)據(jù)成員的類型可以是Java中任意的數(shù)據(jù)類型(基本數(shù)據(jù)類型,類,接口,數(shù)組)18第18頁,課件共46頁,創(chuàng)作于2023年2月聲明格式

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

staticintsum=7; privateStringgardenName; privateFruitbanana;

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

[public|protected|private]

[static][

final][abstract][synchronized]

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

方法體 }返回類型可以是任意的Java數(shù)據(jù)類型,當(dāng)一個方法不需要返回值時,返回類型為void。20第20頁,課件共46頁,創(chuàng)作于2023年2月參數(shù)的類型可以是簡單數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型(數(shù)組、類或接口),傳遞方式都是采用傳值的方式完成,也就是,對參數(shù)值的任何改動都只限于這個方法的作用域內(nèi)。方法體是對方法的實現(xiàn)。它包括局部變量的聲明以及所有合法的Java指令。局部變量的作用域只在該方法內(nèi)部。21第21頁,課件共46頁,創(chuàng)作于2023年2月一個簡單的類:類的定義放在Car.java里,測試代碼放入CarDemo.java里,運行時,這兩個文件放在同一目錄下。或者兩段代碼放在同一文件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頁,課件共46頁,創(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頁,課件共46頁,創(chuàng)作于2023年2月4、對象的創(chuàng)建,初始化對象的創(chuàng)建與C++類似,同樣的Java也提供了構(gòu)造方法(constructor)在對象創(chuàng)建時被自動調(diào)用,進行對象初始化。24第24頁,課件共46頁,創(chuàng)作于2023年2月4.1 對象的創(chuàng)建對象的聲明格式

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

CarCarDemo;

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

new<類名>()

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

CarCarDemo=newCar();

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

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

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

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

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

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

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

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

NoStaticErrornoError;noError=newNoStat

溫馨提示

  • 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

提交評論