JAVA面向?qū)ο蠡A(chǔ)課件_第1頁(yè)
JAVA面向?qū)ο蠡A(chǔ)課件_第2頁(yè)
JAVA面向?qū)ο蠡A(chǔ)課件_第3頁(yè)
JAVA面向?qū)ο蠡A(chǔ)課件_第4頁(yè)
JAVA面向?qū)ο蠡A(chǔ)課件_第5頁(yè)
已閱讀5頁(yè),還剩131頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章面向?qū)ο蠡A(chǔ)第三章面向?qū)ο蠡A(chǔ)目標(biāo):

介紹面向?qū)ο缶幊痰幕舅枷?,通過(guò)本課的學(xué)習(xí),應(yīng)該掌握如下知識(shí):1)理解什么是類(lèi)、對(duì)象、構(gòu)造方法,2)對(duì)象在內(nèi)存中的表現(xiàn)形式及如何使用對(duì)象等。3)Java的垃圾回收機(jī)制及訪問(wèn)修飾符。目標(biāo):本章要點(diǎn)類(lèi)和對(duì)象的關(guān)系面向?qū)ο蟮乃枷胱宇?lèi)實(shí)例化的過(guò)程對(duì)象的創(chuàng)建構(gòu)造方法變量的初始化順序?qū)ο髣?chuàng)建的內(nèi)存模型垃圾回收機(jī)制Java中的關(guān)鍵字this關(guān)鍵字static關(guān)鍵字本章要點(diǎn)類(lèi)和對(duì)象的關(guān)系主要內(nèi)容類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Java中的關(guān)鍵字4主要內(nèi)容類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Jav類(lèi)和對(duì)象的關(guān)系面向?qū)ο蟮乃枷耄∣bjectOrientedProgramming,簡(jiǎn)稱(chēng)OOP)面向?qū)ο蟮幕舅枷胧牵瑥默F(xiàn)實(shí)世界中客觀存在的事物出發(fā)來(lái)構(gòu)造軟件系統(tǒng),并在系統(tǒng)的構(gòu)造中盡可能運(yùn)用人類(lèi)的自然思維方式面向?qū)ο蟾訌?qiáng)調(diào)運(yùn)用人類(lèi)在日常的思維邏輯中經(jīng)常采用的思維方法與原則面向?qū)ο蟮娜齻€(gè)特征封裝繼承多態(tài)類(lèi)和對(duì)象的關(guān)系面向?qū)ο蟮乃枷耄∣bjectOriente類(lèi)和對(duì)象的關(guān)系面向?qū)ο笈c面向過(guò)程public

classIcebox{

static

voidputThings(Stringthings){System.out.println("把冰箱門(mén)打開(kāi)");System.out.println("把"+things+"放進(jìn)來(lái)");System.out.println("把冰箱門(mén)關(guān)上");}}voidOpenIcebox(){printf(“把冰箱門(mén)打開(kāi)\n");}voidPutElephantI(){printf(“把大象放冰箱\n");}voidCloseIcebox(){printf(“把冰箱們關(guān)上\n");}intmain(){OpenIcebox();PutElephantIn();CloseIcebox();}publicclassMine{publicstaticvoidmain(Stringargs[]){

Icebox.putThings("大象");}}面向?qū)ο竺嫦蜻^(guò)程類(lèi)和對(duì)象的關(guān)系面向?qū)ο笈c面向過(guò)程publicclassI類(lèi)和對(duì)象的關(guān)系類(lèi)的定義把相似的對(duì)象劃歸成一個(gè)類(lèi)。在軟件設(shè)計(jì)中,類(lèi),就是一個(gè)模板,它定義了通用于一個(gè)特定種類(lèi)的所有對(duì)象的屬性(變量)和行為(方法)。類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)的定義

?西游記游戲軟件中的游戲人物孫悟空:孫悟空的武器是金箍棒,戰(zhàn)斗力五顆星,耐力五顆星唐僧:唐僧沒(méi)有武器,戰(zhàn)斗力為零,耐力五顆星豬八戒:豬八戒的武器是耙子,戰(zhàn)斗力四顆星,耐力兩顆星沙僧:沙僧的武器是月牙鏟,戰(zhàn)斗力三顆星,耐力四顆星類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)的定義修飾符一般為public,也可以沒(méi)有修飾符。注意類(lèi)名的命名規(guī)范。類(lèi)名一般大寫(xiě)類(lèi)的成員:成員變量(屬性)成員函數(shù)(方法)通過(guò)“.”調(diào)用屬性和方法[訪問(wèn)權(quán)限控制符]class類(lèi)名{

類(lèi)的成員

…}類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)的完全聲明形式

[public][abstract|final]class類(lèi)名稱(chēng)

[extends父類(lèi)名稱(chēng)][implements接口名稱(chēng)列表] { 變量成員聲明及初始化; 方法聲明及方法體; }類(lèi)的完全聲明形式變量聲明格式

[public|protected|private] [static][final][transient][volatile] 變量數(shù)據(jù)類(lèi)型變量名1[=變量初值], 變量名2[=變量初值],…;格式說(shuō)明public、protected、private為訪問(wèn)控制符static指明這是一個(gè)靜態(tài)成員變量final指明變量的值不能被修改transient指明變量是臨時(shí)狀態(tài)volatile指明變量是一個(gè)共享變量變量聲明格式類(lèi)的方法聲明格式:[public|protected|private][static][final][abstract][native][synchronized]

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

方法體;}類(lèi)的方法聲明格式:格式說(shuō)明方法修飾public、protected、private為存取控制符static指明方法是一個(gè)類(lèi)方法final指明方法是一個(gè)終結(jié)方法abstract指明方法是一個(gè)抽象方法native用來(lái)集成java代碼和其它語(yǔ)言的代碼synchronized用來(lái)控制多個(gè)并發(fā)線程對(duì)共享數(shù)據(jù)的訪問(wèn)格式說(shuō)明方法調(diào)用給對(duì)象發(fā)消息意味著調(diào)用對(duì)象的某個(gè)方法從對(duì)象中取得信息修改對(duì)象的狀態(tài)或進(jìn)行某種操作進(jìn)行計(jì)算及取得結(jié)果等調(diào)用格式<對(duì)象名>.<方法名>([參數(shù)列表])稱(chēng)點(diǎn)操作符“.”前面的<對(duì)象名>為消息的接收者(receiver)參數(shù)傳遞值傳遞:參數(shù)類(lèi)型為基本數(shù)據(jù)類(lèi)型時(shí)引用傳遞:參數(shù)類(lèi)型為對(duì)象類(lèi)型或數(shù)組時(shí)方法調(diào)用訪問(wèn)修飾符該類(lèi)或非該類(lèi)均可訪問(wèn)public只有該類(lèi)可以訪問(wèn)private相同數(shù)據(jù)包中的類(lèi)可以訪問(wèn)default該類(lèi)及其子類(lèi)的成員可以訪問(wèn),同一個(gè)包中的類(lèi)也可訪問(wèn)protected訪問(wèn)修飾符該類(lèi)或非該類(lèi)均可訪問(wèn)public只有該類(lèi)可以訪問(wèn)p訪問(wèn)修飾符訪問(wèn)修飾符可訪問(wèn)性位置private默認(rèn)protectedpublic同一個(gè)類(lèi)是是是是同一個(gè)包內(nèi)的類(lèi)否是是是不同包內(nèi)的子類(lèi)否否是是不同包并且不是子類(lèi)否否否是訪問(wèn)修飾符訪問(wèn)修飾符可訪問(wèn)性位置private默認(rèn)prote類(lèi)和對(duì)象的關(guān)系類(lèi)的定義Employee.javaclassEmployee{Stringname;intage;doublesalary;publicStringshowName(){System.out.println(name);returnname;}publicintshowAge(){System.out.println(age);returnage;}publicvoidupdateName(Stringname2){name=name2;}publicvoidgetSalary(){System.out.println("Thesalaryofthismonthis2000");}}屬性方法類(lèi)和對(duì)象的關(guān)系類(lèi)的定義classEmployee{屬性方類(lèi)和對(duì)象的關(guān)系類(lèi)的定義?練習(xí)Person.java定義一個(gè)Person類(lèi),Person類(lèi)具有名字、年齡及性別等屬性,并具有一個(gè)getInfo()方法可以打印出Person類(lèi)的屬性,sayHello()方法和大家說(shuō)“Helloeverybody!”類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)的定義?練習(xí)Point.java

定義一個(gè)點(diǎn)類(lèi)Point,包含兩個(gè)成員變量x、y分別表示x和y的坐標(biāo),一個(gè)movePoint(intdx,intdy)方法實(shí)現(xiàn)點(diǎn)的位置的移動(dòng)。publicclassPoint{intx,y;voidmovePoint(intdx,intdy){ x=dx;y=dy;}}類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)的定義?練習(xí)MyDate.java

定義一個(gè)點(diǎn)日期MyDate,包含三個(gè)成員變量year、month、day分別表示年、月、日,以及每個(gè)屬性對(duì)應(yīng)的get和set方法(如,year有g(shù)etYear()方法用來(lái)獲得日期的年份,還有setYear(inty)方法用來(lái)修改或設(shè)置日期的年份),最后還有printDate()方法,調(diào)用該方法可以把日期按照“yyyy-mm-dd”的形式輸出。類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)和對(duì)象的關(guān)系類(lèi)(class)—是對(duì)某一類(lèi)事物的描述對(duì)象(object)—是實(shí)際存在的某類(lèi)事物的個(gè)體,也稱(chēng)為實(shí)例(instance)類(lèi)是創(chuàng)建對(duì)象的模板,對(duì)象是類(lèi)的實(shí)例。類(lèi)和對(duì)象的關(guān)系類(lèi)和對(duì)象的關(guān)系類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建語(yǔ)法格式示例

TestEmployee.java類(lèi)名對(duì)象名

=new

構(gòu)造函數(shù)Employeezhang=newEmployee()類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建類(lèi)名對(duì)象名=new構(gòu)類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建?練習(xí)TestPerson.java在TestPerson類(lèi)里寫(xiě)一個(gè)main方法,在main()方法中:創(chuàng)建一個(gè)Person類(lèi)的對(duì)象這個(gè)對(duì)象的名字叫小沈陽(yáng),年齡28,性別男在控制臺(tái)中打印這個(gè)實(shí)例的信息并調(diào)用這個(gè)對(duì)象的sayHello()方法,向大家問(wèn)好類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建?練習(xí)TestPoint.java在TestPoint類(lèi)里寫(xiě)一個(gè)main方法,在main()方法中:創(chuàng)建一個(gè)Point類(lèi)的對(duì)象這個(gè)點(diǎn)的坐標(biāo)是(3,2)將這個(gè)點(diǎn)移動(dòng)到坐標(biāo)為(5,6)的位置并把移動(dòng)后的點(diǎn)的坐標(biāo)按“(x,y)”形式打印在控制臺(tái)上類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建?練習(xí)TestDate.java在TestDate類(lèi)里寫(xiě)一個(gè)main方法,在main()方法中:創(chuàng)建一個(gè)MyDate類(lèi)的對(duì)象通過(guò)setXXX方法將該日期對(duì)象的時(shí)間設(shè)置為“2013年10月8日”在控制臺(tái)上打印該對(duì)象的月份把該日期對(duì)象按“2013-10-8”的格式輸出類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建類(lèi)和對(duì)象的關(guān)系匿名對(duì)象創(chuàng)建完對(duì)象,在調(diào)用該對(duì)象的方法時(shí),也可以不定義對(duì)象的句柄,而直接調(diào)用這個(gè)對(duì)象的方法。這樣的對(duì)象叫匿名對(duì)象使用匿名對(duì)象的情況如果對(duì)一個(gè)對(duì)象只需要進(jìn)行一次方法調(diào)用newPerson().sayHello()Personp1=newPerson();p1.sayHello();類(lèi)和對(duì)象的關(guān)系匿名對(duì)象newPerson().sayHelContents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Java中的關(guān)鍵字4Contents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型構(gòu)造方法構(gòu)造方法(構(gòu)造函數(shù)/構(gòu)造器,Constructor)具有與類(lèi)相同的名稱(chēng)不含返回值類(lèi)型不能在方法中用return語(yǔ)句返回一個(gè)值一般訪問(wèn)權(quán)限為public

在一個(gè)類(lèi)中,具有上述特征的方法就是構(gòu)造方法。構(gòu)造方法的作用完成對(duì)象的創(chuàng)建,即完成對(duì)象的實(shí)例化一般使用構(gòu)造方法來(lái)完成對(duì)成員變量的初始化示例

TestPerson.java構(gòu)造方法構(gòu)造方法(構(gòu)造函數(shù)/構(gòu)造器,Constructor)構(gòu)造方法默認(rèn)的構(gòu)造方法在Java中,每個(gè)類(lèi)都至少要有一個(gè)構(gòu)造方法,如果程序員沒(méi)有在類(lèi)里定義構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)為這個(gè)類(lèi)產(chǎn)生一個(gè)默認(rèn)的構(gòu)造方法一旦編程者為該類(lèi)定義了構(gòu)造方法,系統(tǒng)就不再提供默認(rèn)的構(gòu)造方法classEmployee{……publicEmployee(){}……}classEmployee{}構(gòu)造方法默認(rèn)的構(gòu)造方法classEmployee{構(gòu)造方法

?練習(xí)

下列關(guān)于類(lèi)的定義的選項(xiàng)中,哪些可以通過(guò)newThing()方法來(lái)創(chuàng)建該類(lèi)的一個(gè)對(duì)象____?A.publicclassThing{B.publicclassThing{publicThing(){}}}C.publicclassThing{D.publicclassThing{publicThing(void){}publicThing(Strings){}}}E.publicclassThing{publicvoidThing(){}publicThing(Strings){}}答案:A、B構(gòu)造方法?練習(xí)答案:A、B構(gòu)造方法

?練習(xí)

給定下列代碼的執(zhí)行結(jié)果是____?

publicclassA{voidA(){System.out.println(“ClassA”);}publicstaticvoidmain(String[]args){newA();}}A.ClassAB.在第2行處拋出異常

C.編譯錯(cuò)誤D.在第6行處拋出異常

E.代碼執(zhí)行后沒(méi)有輸出答案:E構(gòu)造方法?練習(xí)答案:E構(gòu)造方法類(lèi)和對(duì)象的關(guān)系?練習(xí)XiyoujiRole.java構(gòu)造一個(gè)完整的西游記人物類(lèi),并定義一個(gè)構(gòu)造方法,通過(guò)這個(gè)方法可以創(chuàng)建不同的西游記人物,并寫(xiě)一個(gè)main函數(shù)進(jìn)行驗(yàn)證。

孫悟空:孫悟空的武器是金箍棒,戰(zhàn)斗力五顆星,耐力五顆星唐僧:唐僧沒(méi)有武器,戰(zhàn)斗力為零,耐力五顆星豬八戒:豬八戒的武器是耙子,戰(zhàn)斗力四顆星,耐力兩顆星沙僧:沙僧的武器是月牙鏟,戰(zhàn)斗力三顆星,耐力四顆星構(gòu)造方法類(lèi)和對(duì)象的關(guān)系方法的重載方法的重載(overload)函數(shù)的重載就是在同一個(gè)類(lèi)中允許同時(shí)存在一個(gè)以上同名的函數(shù)方法重載的規(guī)則函數(shù)名稱(chēng)相同函數(shù)的參數(shù)必須不同參數(shù)個(gè)數(shù)不同

或參數(shù)類(lèi)型不同函數(shù)的返回值類(lèi)型可以相同,也可以不同方法的重載方法的重載(overload)方法的重載方法的重載(overload)方法的重載方法的重載(overload)方法的重載

?練習(xí)

下列選項(xiàng)中,哪些可以與voidsetAge(intyear,intmonth,intday)方法在同一個(gè)類(lèi)中定義____?A.publicvoidsetAge(){B.voidsetAge(intage){}}C.voidsetAge(inty,intm,intd){D.intsetAge(Dated){}}E.intsetAge(intyear,intmonth,intday){}F.voidsetage(intyear,intmonth,intdat){}答案:ABDF方法的重載?練習(xí)答案:ABDF方法的重載?練習(xí)Person.java在上一個(gè)Person類(lèi)的基礎(chǔ)上,完成以下功能:聲明一個(gè)有參的構(gòu)造方法,使得通過(guò)調(diào)用該構(gòu)造方法可以對(duì)Person類(lèi)的三個(gè)成員變量進(jìn)行初始化再聲明一個(gè)無(wú)參的構(gòu)造方法,實(shí)現(xiàn)構(gòu)造方法的重載方法的重載?練習(xí)Person.java方法的重載?練習(xí)MethodAdd.java在類(lèi)MethodAdd中,聲明三個(gè)方法add,分別計(jì)算兩個(gè)整數(shù)的和三個(gè)整數(shù)的和、兩個(gè)雙精度浮點(diǎn)數(shù)(double)數(shù)的和,并在該類(lèi)寫(xiě)一個(gè)主程序中調(diào)用這個(gè)三個(gè)函數(shù),并將其結(jié)果打印方法的重載?練習(xí)MethodAdd.javaContents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Java中的關(guān)鍵字4Contents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型對(duì)象創(chuàng)建的內(nèi)存模型引用類(lèi)型變量除了8種基本數(shù)據(jù)類(lèi)型的變量,其他變量都是引用類(lèi)型變量類(lèi)(class)接口(interface)數(shù)組Person

p;Animala;int[]c;對(duì)象創(chuàng)建的內(nèi)存模型引用類(lèi)型變量Personp;Anim對(duì)象創(chuàng)建的內(nèi)存模型0x80001.7444“l(fā)isi”P(pán)ersonp0x8000nameageheightPerson

p=new

Person(“l(fā)isi”,44,1.74);

引用類(lèi)型變量的內(nèi)存模型對(duì)象創(chuàng)建的內(nèi)存模型0x80001.7444“l(fā)isi”P(pán)er對(duì)象創(chuàng)建的內(nèi)存模型0x80000x3000……1.7444“l(fā)isi”P(pán)ersonp0x3000nameageheight1.7333“zhang”nameageheightPersonq0x8000引用類(lèi)型變量的內(nèi)存模型Personp=newPerson(“zhang”,33,1.73);Personq=newPerson(“l(fā)isi”,44,1.74);對(duì)象創(chuàng)建的內(nèi)存模型0x80000x3000……1.7444“變量的作用域變量的作用域全局變量類(lèi)體中聲明的成員變量為全局變量全局變量在類(lèi)的整個(gè)生命周期中都有效局部變量方法體中聲明的變量,方法中的參數(shù),或代碼塊中聲明的變量,都是局部變量局部變量只在方法調(diào)用的過(guò)程中有效,方法調(diào)用結(jié)束后失效變量的作用域變量的作用域變量的作用域變量的作用域classEmployee{Stringname;intage;doublesalary;publicStringshowName(){Stringhello=“你好”;System.out.println(hello+name);returnname;}publicvoidupdateName(Stringname2){name=name2;}}全局變量局部變量變量的作用域變量的作用域classEmployee{全局變量的作用域變量初始化的順序隱式賦予變量默認(rèn)值成員變量顯式賦予初始值通過(guò)構(gòu)造方法體賦予新值

示例PersianCat.java各類(lèi)型變量默認(rèn)初始化值類(lèi)型缺省值類(lèi)型缺省值byte(byte)0char'\u0000'short(short)0float0.0Fint0double0.0Dlong0L引用對(duì)象nullbooleanfalse變量的作用域變量初始化的順序各類(lèi)型變量默認(rèn)初始化值類(lèi)型缺省值變量的作用域

?練習(xí)

給定下列代碼的執(zhí)行結(jié)果是____?publicclassX(privatestaticinta;publicstaticvoidmain(String[]args){modify(a);System.out.println(a);}publicstaticvoidmodify(inta){a++;}}A.0B.1C.編譯錯(cuò)誤D.運(yùn)行時(shí)異常答案:A變量的作用域?練習(xí)答案:A程序執(zhí)行過(guò)程

硬盤(pán)程序.java

編譯

.class文件內(nèi)存

執(zhí)行過(guò)程中的內(nèi)存管理代碼JVM系統(tǒng)代碼①

裝載到內(nèi)存區(qū)stackheapdatasegmentcodesegment②找到main方法開(kāi)始執(zhí)行基本數(shù)據(jù)類(lèi)型變量引用類(lèi)型變量地址引用變量靜態(tài)變量常量存放代碼Java代碼在系統(tǒng)中的執(zhí)行過(guò)程程序執(zhí)行過(guò)程補(bǔ)充:參數(shù)傳值當(dāng)方法被調(diào)用時(shí),如果方法有參數(shù),參數(shù)必須要實(shí)例化,即參數(shù)變量必須有具體的值。publicclassDate//類(lèi)聲明{intyear,month,day;//成員變量,表示年、月、日

voidsetDate(inty,intm,intd)//成員方法,設(shè)置日期值

{//無(wú)返回值,有4個(gè)參數(shù)

year=y;month=m;day=d;}publicstaticvoidmain(Stringargs[]){Date1aday=newDate1();//創(chuàng)建對(duì)象

aday.setDate(2013,9,28);//調(diào)用類(lèi)方法}}補(bǔ)充:參數(shù)傳值當(dāng)方法被調(diào)用時(shí),如果方法有參數(shù),參數(shù)必須要實(shí)例1.基本數(shù)據(jù)類(lèi)型參數(shù)的傳值——值這種數(shù)據(jù)傳遞方式被稱(chēng)為是值傳遞,方法接收參數(shù)的值,但不能改變這些參數(shù)的值。2.引用類(lèi)型參數(shù)的傳值——地址引用傳值方式:Java的引用類(lèi)型數(shù)據(jù)包括對(duì)象、數(shù)組和接口,當(dāng)方法中參數(shù)是引用類(lèi)型時(shí),引用數(shù)據(jù)類(lèi)型傳遞給方法的是數(shù)據(jù)在內(nèi)存中的地址,方法中對(duì)參數(shù)變量的操作可以改變?cè)兞康闹怠?.基本數(shù)據(jù)類(lèi)型參數(shù)的傳值——值這種數(shù)據(jù)傳遞方式被稱(chēng)為是值傳classPeople{ Stringface; voidsetFace(Strings){ face=s; }}classC{ voidf(intx,doubley,Peoplep){ x=x+1; y=y+1; p.setFace("笑臉"); System.out.println("參數(shù)x和y的值分別是:"+x+","+y); System.out.println("參數(shù)對(duì)象p的face是:"+p.face); }}publicclassEp4_8{ publicstaticvoidmain(Stringargs[]){ intm=100; doublen=100.88; Peoplezhang=newPeople(); zhang.setFace("很?chē)?yán)肅的樣子"); Ca=newC(); a.f(m,n,zhang); System.out.println("main方法中m和n的值仍然分別是:"+m+","+n); System.out.println("main方法中對(duì)象zhang的face是:"+zhang.face); }}zhang.face="很?chē)?yán)肅的樣子";改變形參值導(dǎo)致實(shí)參值的改變zhang.face=“笑臉";參數(shù)x和y的值分別是:101,101.88參數(shù)對(duì)象p的face是:笑臉main方法中m和n的值仍然分別是:100,100.88main方法中對(duì)象zhang的face是:笑臉classPeople{zhang.face="很?chē)?yán)肅補(bǔ)充內(nèi)容——對(duì)象數(shù)組在Java中不但可以聲明由原始數(shù)據(jù)組成的數(shù)組,還可以聲明由對(duì)象組成的數(shù)組;聲明對(duì)象數(shù)組的方式如://假設(shè)已經(jīng)定義了一個(gè)Student類(lèi)/*聲明由5個(gè)Student對(duì)象組成的數(shù)組*/Student[]stdAry=newStudent[5];補(bǔ)充內(nèi)容——對(duì)象數(shù)組在Java中不但可以聲明由原始數(shù)據(jù)組成的對(duì)象數(shù)組==引用數(shù)組錯(cuò)誤的理解方式學(xué)生對(duì)象的實(shí)例學(xué)生對(duì)象的實(shí)例學(xué)生對(duì)象的實(shí)例學(xué)生對(duì)象的實(shí)例學(xué)生對(duì)象的實(shí)例01244堆棧stdAry堆棧stdAry正確的理解方式對(duì)象的引用01244對(duì)象的引用對(duì)象的引用對(duì)象的引用對(duì)象的引用對(duì)象數(shù)組==引用數(shù)組錯(cuò)誤的理解方式學(xué)生對(duì)象的實(shí)例學(xué)生對(duì)象的實(shí)對(duì)象數(shù)組示例/*對(duì)象數(shù)組示例,假設(shè)已經(jīng)定義了Student類(lèi)*/public

static

voidmain(String[]args){

/*創(chuàng)建包含有5個(gè)Student引用的數(shù)組*/Student[]stdAry=newStudent[5];

/*逐一為每個(gè)引用創(chuàng)建對(duì)象實(shí)例*/stdAry[0]=newStudent("張三",18);stdAry[1]=newStudent("李四",20);stdAry[2]=newStudent("王五",24);stdAry[4]=newStudent("鄭六",21);stdAry[4]=newStudent("田七",19);

for(inti=0;i<stdAry.length;i++){stdAry[i].display();}}對(duì)象數(shù)組示例/*對(duì)象數(shù)組示例,假設(shè)已經(jīng)定義了Student類(lèi)對(duì)象數(shù)組的存放形式堆棧stdAry0124stdAry[0]stdAry[1]stdAry[2]stdAry[4]stdAry[4]4張三18李四20王五24鄭六21田七19對(duì)象數(shù)組的存放形式堆棧stdAry0124stdAry[0]垃圾回收機(jī)制垃圾回收器(GC,GarbageCollection)Java的一個(gè)重要特點(diǎn)句是具有一個(gè)垃圾回收器,并且能夠自動(dòng)回收垃圾,這也是Java相對(duì)于其他語(yǔ)言有優(yōu)勢(shì)的地方對(duì)內(nèi)存的釋放和回收的工作是由Java運(yùn)行系統(tǒng)(JRE)承擔(dān)的,不用編程者關(guān)注在Java程序運(yùn)行過(guò)程中,一個(gè)垃圾回收器會(huì)不定時(shí)地被喚起檢查是否有不再被使用的對(duì)象,并釋放它們所占用的內(nèi)存空間垃圾回收器的啟用不由程序員控制,也無(wú)規(guī)律可循垃圾回收機(jī)制垃圾回收器(GC,GarbageCollec垃圾回收機(jī)制垃圾回收機(jī)制—System.gc()、nullJava里提供了一個(gè)System.gc()方法,使用這個(gè)方法可以建議垃圾回收器回收垃圾在Java中,可以通過(guò)將對(duì)象的引用變量設(shè)置為null,來(lái)暗示垃圾回收器來(lái)回收該對(duì)象classEmployee{Stringname;intage;doublesalary;publicstaticvoidmain(Stringargs[]){Employeee=newEmployee();newEmployee();

e=null;System.gc();System.out.println(“Theprogramisend”);}}垃圾回收機(jī)制垃圾回收機(jī)制—System.gc()、nu垃圾回收機(jī)制后臺(tái)線程主線程O(píng)bjecto2=newObject();o2=null;Objecto1=newObject();o1objectTheheap檢查出對(duì)象沒(méi)有引用指向調(diào)用o2對(duì)象的finalize()方法垃圾回收機(jī)制回收分配給該對(duì)象的內(nèi)存垃圾回收采用Java多線程機(jī)制o2object×

垃圾回收機(jī)制垃圾回收機(jī)制后臺(tái)線程主線程O(píng)bjecto2=newO垃圾回收機(jī)制

?練習(xí)

什么時(shí)候程序會(huì)銷(xiāo)毀一個(gè)對(duì)象x____?A.x.delete()B.x.finalize()C.System.gc()D.設(shè)置對(duì)象的引用為nullF.

只有垃圾回收器才可以銷(xiāo)毀一個(gè)對(duì)象答案:F垃圾回收機(jī)制?練習(xí)答案:FContents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Java中的關(guān)鍵字4Contents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型Java中的關(guān)鍵字this關(guān)鍵字代表對(duì)象自身的引用一個(gè)引用指向調(diào)用該方法的當(dāng)前對(duì)象通常在類(lèi)的方法定義中使用用this關(guān)鍵字的情況方法中的變量與成員變量重名在一個(gè)構(gòu)造方法中,調(diào)用其它重載的構(gòu)造方法返回當(dāng)前對(duì)象的引用

Java中的關(guān)鍵字this關(guān)鍵字成員變量和局部變量publicclassEmployee{ intsideA,sideB,sideC; voidsetSide(intsideA,intsideB,intsideC){

this.sideA=sideA;

this.sideB=sideB;

this.sideC=sideC; }}注:如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,這時(shí)如果想在該方法內(nèi)使用成員變量,必須使用關(guān)鍵字this。成員變量和局部變量publicclassEmployeeJava中的關(guān)鍵字static關(guān)鍵字static可以修飾的元素屬性方法代碼塊需要注意的問(wèn)題只能修飾類(lèi)成員,不能修飾局部變量。Java中的關(guān)鍵字static關(guān)鍵字Java中的關(guān)鍵字static修飾的變量—靜態(tài)變量所有對(duì)象共享也稱(chēng)為類(lèi)變量用static修飾的成員變量,它們?cè)陬?lèi)被載入時(shí)創(chuàng)建,只要類(lèi)存在,static變量就存在兩種方式訪問(wèn):直接訪問(wèn):類(lèi)名.屬性;實(shí)例化后訪問(wèn):對(duì)象名.屬性靜態(tài)屬性Java中的關(guān)鍵字static修飾的變量—靜態(tài)變量靜態(tài)屬Java中的關(guān)鍵字static變量的內(nèi)存模型Java中的關(guān)鍵字static變量的內(nèi)存模型Java中的關(guān)鍵字?練習(xí)Person.java在Person類(lèi)中添加一些代碼,使其可以統(tǒng)計(jì)在整個(gè)使用過(guò)程中一共產(chǎn)生了多少個(gè)Person類(lèi)的實(shí)例對(duì)象提示:利用static修飾的變量Java中的關(guān)鍵字?練習(xí)Person.javaJava中的關(guān)鍵字static修飾的方法—靜態(tài)方法不需要實(shí)例化,可以直接訪問(wèn)也稱(chēng)為類(lèi)方法兩種方式訪問(wèn):直接訪問(wèn):類(lèi)名.方法名()實(shí)例化后訪問(wèn):對(duì)象名.方法名()static方法的作用簡(jiǎn)化方法的使用;便于訪問(wèn)靜態(tài)屬性;注意事項(xiàng)靜態(tài)方法里只能直接訪問(wèn)靜態(tài)成員,而不能直接訪問(wèn)類(lèi)中的非靜態(tài)成員靜態(tài)方法中不能使用this、super關(guān)鍵字靜態(tài)方法不能被非靜態(tài)方法覆蓋,靜態(tài)方法不能修飾構(gòu)造方法靜態(tài)方法Java中的關(guān)鍵字static修飾的方法—靜態(tài)方法靜態(tài)方Java中的關(guān)鍵字static修飾的代碼塊—靜態(tài)代碼塊一個(gè)類(lèi)中由static關(guān)鍵字修飾的,不包含在任何方法體中的代碼塊當(dāng)類(lèi)被載入時(shí),靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次靜態(tài)塊經(jīng)常用來(lái)進(jìn)行類(lèi)屬性的初始化靜態(tài)代碼塊Java中的關(guān)鍵字static修飾的代碼塊—靜態(tài)代碼塊靜Java中的關(guān)鍵字?練習(xí)publicclassCircleStatic{staticdoublepi=3.14;intradius=100;publicstaticvoidmain(String[]args){System.out.println(_1_);//打印pi

__________2__________;System.out.println(__3__);//打印radius}}答案:piCircleStaticc=newCircleStatic()c.radiusJava中的關(guān)鍵字?練習(xí)publicclassCir總結(jié)類(lèi)和對(duì)象的關(guān)系如何定義類(lèi)對(duì)象的創(chuàng)建構(gòu)造方法如何定義構(gòu)造方法方法的重載對(duì)象創(chuàng)建的內(nèi)存模型引用類(lèi)型變量變量的初始化垃圾回收機(jī)制Java中的關(guān)鍵字this關(guān)鍵字static關(guān)鍵字總結(jié)類(lèi)和對(duì)象的關(guān)系第三章面向?qū)ο蠡A(chǔ)第三章面向?qū)ο蠡A(chǔ)目標(biāo):

介紹面向?qū)ο缶幊痰幕舅枷耄ㄟ^(guò)本課的學(xué)習(xí),應(yīng)該掌握如下知識(shí):1)理解什么是類(lèi)、對(duì)象、構(gòu)造方法,2)對(duì)象在內(nèi)存中的表現(xiàn)形式及如何使用對(duì)象等。3)Java的垃圾回收機(jī)制及訪問(wèn)修飾符。目標(biāo):本章要點(diǎn)類(lèi)和對(duì)象的關(guān)系面向?qū)ο蟮乃枷胱宇?lèi)實(shí)例化的過(guò)程對(duì)象的創(chuàng)建構(gòu)造方法變量的初始化順序?qū)ο髣?chuàng)建的內(nèi)存模型垃圾回收機(jī)制Java中的關(guān)鍵字this關(guān)鍵字static關(guān)鍵字本章要點(diǎn)類(lèi)和對(duì)象的關(guān)系主要內(nèi)容類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Java中的關(guān)鍵字4主要內(nèi)容類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Jav類(lèi)和對(duì)象的關(guān)系面向?qū)ο蟮乃枷耄∣bjectOrientedProgramming,簡(jiǎn)稱(chēng)OOP)面向?qū)ο蟮幕舅枷胧?,從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來(lái)構(gòu)造軟件系統(tǒng),并在系統(tǒng)的構(gòu)造中盡可能運(yùn)用人類(lèi)的自然思維方式面向?qū)ο蟾訌?qiáng)調(diào)運(yùn)用人類(lèi)在日常的思維邏輯中經(jīng)常采用的思維方法與原則面向?qū)ο蟮娜齻€(gè)特征封裝繼承多態(tài)類(lèi)和對(duì)象的關(guān)系面向?qū)ο蟮乃枷耄∣bjectOriente類(lèi)和對(duì)象的關(guān)系面向?qū)ο笈c面向過(guò)程public

classIcebox{

static

voidputThings(Stringthings){System.out.println("把冰箱門(mén)打開(kāi)");System.out.println("把"+things+"放進(jìn)來(lái)");System.out.println("把冰箱門(mén)關(guān)上");}}voidOpenIcebox(){printf(“把冰箱門(mén)打開(kāi)\n");}voidPutElephantI(){printf(“把大象放冰箱\n");}voidCloseIcebox(){printf(“把冰箱們關(guān)上\n");}intmain(){OpenIcebox();PutElephantIn();CloseIcebox();}publicclassMine{publicstaticvoidmain(Stringargs[]){

Icebox.putThings("大象");}}面向?qū)ο竺嫦蜻^(guò)程類(lèi)和對(duì)象的關(guān)系面向?qū)ο笈c面向過(guò)程publicclassI類(lèi)和對(duì)象的關(guān)系類(lèi)的定義把相似的對(duì)象劃歸成一個(gè)類(lèi)。在軟件設(shè)計(jì)中,類(lèi),就是一個(gè)模板,它定義了通用于一個(gè)特定種類(lèi)的所有對(duì)象的屬性(變量)和行為(方法)。類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)的定義

?西游記游戲軟件中的游戲人物孫悟空:孫悟空的武器是金箍棒,戰(zhàn)斗力五顆星,耐力五顆星唐僧:唐僧沒(méi)有武器,戰(zhàn)斗力為零,耐力五顆星豬八戒:豬八戒的武器是耙子,戰(zhàn)斗力四顆星,耐力兩顆星沙僧:沙僧的武器是月牙鏟,戰(zhàn)斗力三顆星,耐力四顆星類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)的定義修飾符一般為public,也可以沒(méi)有修飾符。注意類(lèi)名的命名規(guī)范。類(lèi)名一般大寫(xiě)類(lèi)的成員:成員變量(屬性)成員函數(shù)(方法)通過(guò)“.”調(diào)用屬性和方法[訪問(wèn)權(quán)限控制符]class類(lèi)名{

類(lèi)的成員

…}類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)的完全聲明形式

[public][abstract|final]class類(lèi)名稱(chēng)

[extends父類(lèi)名稱(chēng)][implements接口名稱(chēng)列表] { 變量成員聲明及初始化; 方法聲明及方法體; }類(lèi)的完全聲明形式變量聲明格式

[public|protected|private] [static][final][transient][volatile] 變量數(shù)據(jù)類(lèi)型變量名1[=變量初值], 變量名2[=變量初值],…;格式說(shuō)明public、protected、private為訪問(wèn)控制符static指明這是一個(gè)靜態(tài)成員變量final指明變量的值不能被修改transient指明變量是臨時(shí)狀態(tài)volatile指明變量是一個(gè)共享變量變量聲明格式類(lèi)的方法聲明格式:[public|protected|private][static][final][abstract][native][synchronized]

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

方法體;}類(lèi)的方法聲明格式:格式說(shuō)明方法修飾public、protected、private為存取控制符static指明方法是一個(gè)類(lèi)方法final指明方法是一個(gè)終結(jié)方法abstract指明方法是一個(gè)抽象方法native用來(lái)集成java代碼和其它語(yǔ)言的代碼synchronized用來(lái)控制多個(gè)并發(fā)線程對(duì)共享數(shù)據(jù)的訪問(wèn)格式說(shuō)明方法調(diào)用給對(duì)象發(fā)消息意味著調(diào)用對(duì)象的某個(gè)方法從對(duì)象中取得信息修改對(duì)象的狀態(tài)或進(jìn)行某種操作進(jìn)行計(jì)算及取得結(jié)果等調(diào)用格式<對(duì)象名>.<方法名>([參數(shù)列表])稱(chēng)點(diǎn)操作符“.”前面的<對(duì)象名>為消息的接收者(receiver)參數(shù)傳遞值傳遞:參數(shù)類(lèi)型為基本數(shù)據(jù)類(lèi)型時(shí)引用傳遞:參數(shù)類(lèi)型為對(duì)象類(lèi)型或數(shù)組時(shí)方法調(diào)用訪問(wèn)修飾符該類(lèi)或非該類(lèi)均可訪問(wèn)public只有該類(lèi)可以訪問(wèn)private相同數(shù)據(jù)包中的類(lèi)可以訪問(wèn)default該類(lèi)及其子類(lèi)的成員可以訪問(wèn),同一個(gè)包中的類(lèi)也可訪問(wèn)protected訪問(wèn)修飾符該類(lèi)或非該類(lèi)均可訪問(wèn)public只有該類(lèi)可以訪問(wèn)p訪問(wèn)修飾符訪問(wèn)修飾符可訪問(wèn)性位置private默認(rèn)protectedpublic同一個(gè)類(lèi)是是是是同一個(gè)包內(nèi)的類(lèi)否是是是不同包內(nèi)的子類(lèi)否否是是不同包并且不是子類(lèi)否否否是訪問(wèn)修飾符訪問(wèn)修飾符可訪問(wèn)性位置private默認(rèn)prote類(lèi)和對(duì)象的關(guān)系類(lèi)的定義Employee.javaclassEmployee{Stringname;intage;doublesalary;publicStringshowName(){System.out.println(name);returnname;}publicintshowAge(){System.out.println(age);returnage;}publicvoidupdateName(Stringname2){name=name2;}publicvoidgetSalary(){System.out.println("Thesalaryofthismonthis2000");}}屬性方法類(lèi)和對(duì)象的關(guān)系類(lèi)的定義classEmployee{屬性方類(lèi)和對(duì)象的關(guān)系類(lèi)的定義?練習(xí)Person.java定義一個(gè)Person類(lèi),Person類(lèi)具有名字、年齡及性別等屬性,并具有一個(gè)getInfo()方法可以打印出Person類(lèi)的屬性,sayHello()方法和大家說(shuō)“Helloeverybody!”類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)的定義?練習(xí)Point.java

定義一個(gè)點(diǎn)類(lèi)Point,包含兩個(gè)成員變量x、y分別表示x和y的坐標(biāo),一個(gè)movePoint(intdx,intdy)方法實(shí)現(xiàn)點(diǎn)的位置的移動(dòng)。publicclassPoint{intx,y;voidmovePoint(intdx,intdy){ x=dx;y=dy;}}類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)的定義?練習(xí)MyDate.java

定義一個(gè)點(diǎn)日期MyDate,包含三個(gè)成員變量year、month、day分別表示年、月、日,以及每個(gè)屬性對(duì)應(yīng)的get和set方法(如,year有g(shù)etYear()方法用來(lái)獲得日期的年份,還有setYear(inty)方法用來(lái)修改或設(shè)置日期的年份),最后還有printDate()方法,調(diào)用該方法可以把日期按照“yyyy-mm-dd”的形式輸出。類(lèi)和對(duì)象的關(guān)系類(lèi)的定義類(lèi)和對(duì)象的關(guān)系類(lèi)和對(duì)象的關(guān)系類(lèi)(class)—是對(duì)某一類(lèi)事物的描述對(duì)象(object)—是實(shí)際存在的某類(lèi)事物的個(gè)體,也稱(chēng)為實(shí)例(instance)類(lèi)是創(chuàng)建對(duì)象的模板,對(duì)象是類(lèi)的實(shí)例。類(lèi)和對(duì)象的關(guān)系類(lèi)和對(duì)象的關(guān)系類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建語(yǔ)法格式示例

TestEmployee.java類(lèi)名對(duì)象名

=new

構(gòu)造函數(shù)Employeezhang=newEmployee()類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建類(lèi)名對(duì)象名=new構(gòu)類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建?練習(xí)TestPerson.java在TestPerson類(lèi)里寫(xiě)一個(gè)main方法,在main()方法中:創(chuàng)建一個(gè)Person類(lèi)的對(duì)象這個(gè)對(duì)象的名字叫小沈陽(yáng),年齡28,性別男在控制臺(tái)中打印這個(gè)實(shí)例的信息并調(diào)用這個(gè)對(duì)象的sayHello()方法,向大家問(wèn)好類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建?練習(xí)TestPoint.java在TestPoint類(lèi)里寫(xiě)一個(gè)main方法,在main()方法中:創(chuàng)建一個(gè)Point類(lèi)的對(duì)象這個(gè)點(diǎn)的坐標(biāo)是(3,2)將這個(gè)點(diǎn)移動(dòng)到坐標(biāo)為(5,6)的位置并把移動(dòng)后的點(diǎn)的坐標(biāo)按“(x,y)”形式打印在控制臺(tái)上類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建?練習(xí)TestDate.java在TestDate類(lèi)里寫(xiě)一個(gè)main方法,在main()方法中:創(chuàng)建一個(gè)MyDate類(lèi)的對(duì)象通過(guò)setXXX方法將該日期對(duì)象的時(shí)間設(shè)置為“2013年10月8日”在控制臺(tái)上打印該對(duì)象的月份把該日期對(duì)象按“2013-10-8”的格式輸出類(lèi)和對(duì)象的關(guān)系對(duì)象的創(chuàng)建類(lèi)和對(duì)象的關(guān)系匿名對(duì)象創(chuàng)建完對(duì)象,在調(diào)用該對(duì)象的方法時(shí),也可以不定義對(duì)象的句柄,而直接調(diào)用這個(gè)對(duì)象的方法。這樣的對(duì)象叫匿名對(duì)象使用匿名對(duì)象的情況如果對(duì)一個(gè)對(duì)象只需要進(jìn)行一次方法調(diào)用newPerson().sayHello()Personp1=newPerson();p1.sayHello();類(lèi)和對(duì)象的關(guān)系匿名對(duì)象newPerson().sayHelContents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Java中的關(guān)鍵字4Contents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型構(gòu)造方法構(gòu)造方法(構(gòu)造函數(shù)/構(gòu)造器,Constructor)具有與類(lèi)相同的名稱(chēng)不含返回值類(lèi)型不能在方法中用return語(yǔ)句返回一個(gè)值一般訪問(wèn)權(quán)限為public

在一個(gè)類(lèi)中,具有上述特征的方法就是構(gòu)造方法。構(gòu)造方法的作用完成對(duì)象的創(chuàng)建,即完成對(duì)象的實(shí)例化一般使用構(gòu)造方法來(lái)完成對(duì)成員變量的初始化示例

TestPerson.java構(gòu)造方法構(gòu)造方法(構(gòu)造函數(shù)/構(gòu)造器,Constructor)構(gòu)造方法默認(rèn)的構(gòu)造方法在Java中,每個(gè)類(lèi)都至少要有一個(gè)構(gòu)造方法,如果程序員沒(méi)有在類(lèi)里定義構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)為這個(gè)類(lèi)產(chǎn)生一個(gè)默認(rèn)的構(gòu)造方法一旦編程者為該類(lèi)定義了構(gòu)造方法,系統(tǒng)就不再提供默認(rèn)的構(gòu)造方法classEmployee{……publicEmployee(){}……}classEmployee{}構(gòu)造方法默認(rèn)的構(gòu)造方法classEmployee{構(gòu)造方法

?練習(xí)

下列關(guān)于類(lèi)的定義的選項(xiàng)中,哪些可以通過(guò)newThing()方法來(lái)創(chuàng)建該類(lèi)的一個(gè)對(duì)象____?A.publicclassThing{B.publicclassThing{publicThing(){}}}C.publicclassThing{D.publicclassThing{publicThing(void){}publicThing(Strings){}}}E.publicclassThing{publicvoidThing(){}publicThing(Strings){}}答案:A、B構(gòu)造方法?練習(xí)答案:A、B構(gòu)造方法

?練習(xí)

給定下列代碼的執(zhí)行結(jié)果是____?

publicclassA{voidA(){System.out.println(“ClassA”);}publicstaticvoidmain(String[]args){newA();}}A.ClassAB.在第2行處拋出異常

C.編譯錯(cuò)誤D.在第6行處拋出異常

E.代碼執(zhí)行后沒(méi)有輸出答案:E構(gòu)造方法?練習(xí)答案:E構(gòu)造方法類(lèi)和對(duì)象的關(guān)系?練習(xí)XiyoujiRole.java構(gòu)造一個(gè)完整的西游記人物類(lèi),并定義一個(gè)構(gòu)造方法,通過(guò)這個(gè)方法可以創(chuàng)建不同的西游記人物,并寫(xiě)一個(gè)main函數(shù)進(jìn)行驗(yàn)證。

孫悟空:孫悟空的武器是金箍棒,戰(zhàn)斗力五顆星,耐力五顆星唐僧:唐僧沒(méi)有武器,戰(zhàn)斗力為零,耐力五顆星豬八戒:豬八戒的武器是耙子,戰(zhàn)斗力四顆星,耐力兩顆星沙僧:沙僧的武器是月牙鏟,戰(zhàn)斗力三顆星,耐力四顆星構(gòu)造方法類(lèi)和對(duì)象的關(guān)系方法的重載方法的重載(overload)函數(shù)的重載就是在同一個(gè)類(lèi)中允許同時(shí)存在一個(gè)以上同名的函數(shù)方法重載的規(guī)則函數(shù)名稱(chēng)相同函數(shù)的參數(shù)必須不同參數(shù)個(gè)數(shù)不同

或參數(shù)類(lèi)型不同函數(shù)的返回值類(lèi)型可以相同,也可以不同方法的重載方法的重載(overload)方法的重載方法的重載(overload)方法的重載方法的重載(overload)方法的重載

?練習(xí)

下列選項(xiàng)中,哪些可以與voidsetAge(intyear,intmonth,intday)方法在同一個(gè)類(lèi)中定義____?A.publicvoidsetAge(){B.voidsetAge(intage){}}C.voidsetAge(inty,intm,intd){D.intsetAge(Dated){}}E.intsetAge(intyear,intmonth,intday){}F.voidsetage(intyear,intmonth,intdat){}答案:ABDF方法的重載?練習(xí)答案:ABDF方法的重載?練習(xí)Person.java在上一個(gè)Person類(lèi)的基礎(chǔ)上,完成以下功能:聲明一個(gè)有參的構(gòu)造方法,使得通過(guò)調(diào)用該構(gòu)造方法可以對(duì)Person類(lèi)的三個(gè)成員變量進(jìn)行初始化再聲明一個(gè)無(wú)參的構(gòu)造方法,實(shí)現(xiàn)構(gòu)造方法的重載方法的重載?練習(xí)Person.java方法的重載?練習(xí)MethodAdd.java在類(lèi)MethodAdd中,聲明三個(gè)方法add,分別計(jì)算兩個(gè)整數(shù)的和三個(gè)整數(shù)的和、兩個(gè)雙精度浮點(diǎn)數(shù)(double)數(shù)的和,并在該類(lèi)寫(xiě)一個(gè)主程序中調(diào)用這個(gè)三個(gè)函數(shù),并將其結(jié)果打印方法的重載?練習(xí)MethodAdd.javaContents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型3Java中的關(guān)鍵字4Contents類(lèi)和對(duì)象的關(guān)系1構(gòu)造方法2對(duì)象創(chuàng)建的內(nèi)存模型對(duì)象創(chuàng)建的內(nèi)存模型引用類(lèi)型變量除了8種基本數(shù)據(jù)類(lèi)型的變量,其他變量都是引用類(lèi)型變量類(lèi)(class)接口(interface)數(shù)組Person

p;Animala;int[]c;對(duì)象創(chuàng)建的內(nèi)存模型引用類(lèi)型變量Personp;Anim對(duì)象創(chuàng)建的內(nèi)存模型0x80001.7444“l(fā)isi”P(pán)ersonp0x8000nameageheightPerson

p=new

Person(“l(fā)isi”,44,1.74);

引用類(lèi)型變量的內(nèi)存模型對(duì)象創(chuàng)建的內(nèi)存模型0x80001.7444“l(fā)isi”P(pán)er對(duì)象創(chuàng)建的內(nèi)存模型0x80000x3000……1.7444“l(fā)isi”P(pán)ersonp0x3000nameageheight1.7333“zhang”nameageheightPersonq0x8000引用類(lèi)型變量的內(nèi)存模型Personp=newPerson(“zhang”,33,1.73);Personq=newPerson(“l(fā)isi”,44,1.74);對(duì)象創(chuàng)建的內(nèi)存模型0x80000x3000……1.7444“變量的作用域變量的作用域全局變量類(lèi)體中聲明的成員變量為全局變量全局變量在類(lèi)的整個(gè)生命周期中都有效局部變量方法體中聲明的變量,方法中的參數(shù),或代碼塊中聲明的變量,都是局部變量局部變量只在方法調(diào)用的過(guò)程中有效,方法調(diào)用結(jié)束后失效變量的作用域變量的作用域變量的作用域變量的作用域classEmployee{Stringname;intage;doublesalary;publicStringshowName(){Stringhello=“你好”;System.out.println(hello+name);returnname;}publicvoidupdateName(Stringname2){name=name2;}}全局變量局部變量變量的作用域變量的作用域classEmployee{全局變量的作用域變量初始化的順序隱式賦予變量默認(rèn)值成員變量顯式賦予初始值通過(guò)構(gòu)造方法體賦予新值

示例PersianCat.java各類(lèi)型變量默認(rèn)初始化值類(lèi)型缺省值類(lèi)型缺省值byte(byte)0char'\u0000'short(short)0float0.0Fint0double0.0Dlong0L引用對(duì)象nullbooleanfalse變量的作用域變量初始化的順序各類(lèi)型變量默認(rèn)初始化值類(lèi)型缺省值變量的作用域

?練習(xí)

給定下列代碼的執(zhí)行結(jié)果是____?publicclassX(privatestaticinta;publicstaticvoidmain(String[]args){modify(a);System.out.println(a);}publicstaticvoidmodify(inta){a++;}}A.0B.1C.編譯錯(cuò)誤D.運(yùn)行時(shí)異常答案:A變量的作用域?練習(xí)答案:A程序執(zhí)行過(guò)程

硬盤(pán)程序.java

編譯

.class文件內(nèi)存

執(zhí)行過(guò)程中的內(nèi)存管理代碼JVM系統(tǒng)代碼①

裝載到內(nèi)存區(qū)stackheapdatasegmentcodesegment②找到main方法開(kāi)始執(zhí)行基本數(shù)據(jù)類(lèi)型變量引用類(lèi)型變量地址引用變量靜態(tài)變量常量存放代碼Java代碼在系統(tǒng)中的執(zhí)行過(guò)程程序執(zhí)行過(guò)程補(bǔ)充:參數(shù)傳值當(dāng)方法被調(diào)用時(shí),如果方法有參數(shù),參數(shù)必須要實(shí)例化,即參數(shù)變量必須有具體的值。publicclassDate//類(lèi)聲明{intyear,month,day;//成員變量,表示年、月、日

voidsetDate(inty,intm,intd)//成員方法,設(shè)置日期值

{//無(wú)返回值,有4個(gè)參數(shù)

year=y;month=m;day=d;}publicstaticvoidmain(Stringargs[]){Date1aday=newDate1();//創(chuàng)建對(duì)象

aday.setDate(2013,9,28);//調(diào)用類(lèi)方法}}補(bǔ)充:參數(shù)傳值當(dāng)方法被調(diào)用時(shí),如果方法有參數(shù),參數(shù)必須要實(shí)例1.基本數(shù)據(jù)類(lèi)型參數(shù)的傳值——值這種數(shù)據(jù)傳遞方式被稱(chēng)為是值傳遞,方法接收參數(shù)的值,但不能改變這些參數(shù)的值。2.引用類(lèi)型參數(shù)的傳值——地址引用傳值方式:Java的引用類(lèi)型數(shù)據(jù)包括對(duì)象、數(shù)組和接口,當(dāng)方法中參數(shù)是引用類(lèi)型時(shí),引用數(shù)據(jù)類(lèi)型傳遞給方法的是數(shù)據(jù)在內(nèi)存中的地址,方法中對(duì)參數(shù)變量的操作可以改變?cè)兞康闹怠?.基本數(shù)據(jù)類(lèi)型參數(shù)的傳值——值這種數(shù)據(jù)傳遞方式被稱(chēng)為是值傳classPeople{ Stringface; voidsetFace(Strings){ face=s; }}classC{ voidf(intx,doubley,Peoplep){ x=x+1; y=y+1; p.setFace("笑臉"); System.out.println("參數(shù)x和y的值分別是:"+x+","+y); System.out.println("參數(shù)對(duì)象p的face是:"+p.face); }}publicclassEp4_8{ publicstaticvoidmain(Stringargs[]){ in

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論