《《面向?qū)ο蟪绦蛟O(shè)計(jì)》PPT課件.ppt》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《《面向?qū)ο蟪绦蛟O(shè)計(jì)》PPT課件.ppt(27頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、Java程序設(shè)計(jì)視頻教程,本講主題:面向?qū)ο蟪绦蛟O(shè)計(jì),本講主講教師:趙小敏,2,第3章面向?qū)ο蟪绦蛟O(shè)計(jì)(2),3.4類(lèi)的設(shè)計(jì)3.5對(duì)象的創(chuàng)建3.6對(duì)象的使用,3,3.4類(lèi)的設(shè)計(jì),類(lèi)的格式類(lèi)首聲明定義類(lèi)的名字、訪(fǎng)問(wèn)權(quán)限以及與其它類(lèi)的關(guān)系等。類(lèi)主體定義類(lèi)的成員,包括變量(數(shù)據(jù))和方法(行為),4,類(lèi)首聲明,classextendsimplementsclass:類(lèi)定義的關(guān)鍵字;extends:表示類(lèi)和另外一些類(lèi)(超類(lèi))的繼承關(guān)系;implements:表示類(lèi)實(shí)現(xiàn)了某些接口;修飾符:表示類(lèi)訪(fǎng)問(wèn)權(quán)限(public、缺省方式等)和一些其它特性(abstract、final等);一個(gè)類(lèi)可以同時(shí)有多個(gè)修飾符
2、(任意排序),但不能有相同的修飾符。,5,類(lèi)的修飾符,缺省方式:class沒(méi)有修飾符,只能被同一個(gè)包名中的類(lèi)訪(fǎng)問(wèn)public:能被所有的類(lèi)訪(fǎng)問(wèn)abstract:修飾的類(lèi)被稱(chēng)為抽象類(lèi)。抽象類(lèi)就是沒(méi)有具體對(duì)象的概念類(lèi)。final:不能被繼承,即類(lèi)不能有子類(lèi),6,類(lèi)主體,//類(lèi)首,以下為類(lèi)主體成員變量即類(lèi)的數(shù)據(jù),反映了類(lèi)的屬性和狀態(tài)。成員方法即類(lèi)的行為(對(duì)數(shù)據(jù)的操作)成員方法可以是普通方法、構(gòu)造方法、main方法,7,例3-2:聲明一個(gè)學(xué)生類(lèi),publicclassStudentStringname;charsex;intstuID;publicStudent()publicStudent(Stri
3、ngstuName,charsex,intstuID)name=stuName;this.sex=sex;this.stuID=stuID;publicvoidsetName(StringstuName)name=stuName;publicvoidsetSex(charsex)this.sex=sex;publicvoidsetStuID(intstuID)this.stuID=stuID;,8,staticfinalstatic:表示是一個(gè)類(lèi)成員變量(靜態(tài)變量);final:表示是一個(gè)常量(最終成員變量);例:finaldoublePI=3.1415926;修飾符:表示變量的訪(fǎng)問(wèn)權(quán)限(缺省
4、訪(fǎng)問(wèn)、public、protected和private)作用域:整個(gè)類(lèi)。,成員變量的聲明格式,9,()throws方法體修飾符:方法的訪(fǎng)問(wèn)權(quán)限(缺省的、public、protected和private)static:類(lèi)方法(靜態(tài)方法);abstract:抽象方法(無(wú)方法體的方法);final:最終方法(不能被子類(lèi)改變)。throws:表示拋出異常,成員方法的聲明格式,10,構(gòu)造方法,類(lèi)的構(gòu)造方法是一種特殊方法,作用是在創(chuàng)建對(duì)象時(shí)Java系統(tǒng)調(diào)用構(gòu)造方法去初始化新建對(duì)象的成員變量;例:Students1=newStudent(“張三”,男,20080301);如果沒(méi)有自定義構(gòu)造方法,則Java調(diào)
5、用類(lèi)的默認(rèn)構(gòu)造方法。Java將使用缺省值來(lái)初始化成員變量。例:Students2=newStudent();,11,構(gòu)造方法的特性,類(lèi)的構(gòu)造方名必須和類(lèi)名相同;構(gòu)造方法沒(méi)有返回值(在構(gòu)造方法名字前連void也不要加);可以有public,protected,private等任何訪(fǎng)問(wèn)的修飾者沒(méi)有修飾。但不能有以下非訪(fǎng)問(wèn)性質(zhì)的修飾:abstract,final,native,static等。,12,3.4實(shí)例對(duì)象的創(chuàng)建和使用,創(chuàng)建對(duì)象的兩種方式:(1)先聲明對(duì)象,然后實(shí)例對(duì)象例:Students;//聲明對(duì)象s=newStudent();//實(shí)例化對(duì)象(2)=new(參數(shù));例:Students=
6、newStudent();,13,實(shí)例化(創(chuàng)建對(duì)象),實(shí)例化就是為對(duì)象分配存儲(chǔ)空間,并同時(shí)對(duì)類(lèi)的成員變量進(jìn)行初始化。類(lèi)的成員變量都有默認(rèn)值,如果為基本數(shù)據(jù)類(lèi)型,默認(rèn)值為0型值,如果是引用類(lèi)型,則為null。用new運(yùn)算符和類(lèi)的構(gòu)造方法Student()來(lái)完成。,14,例3-3:測(cè)試Student類(lèi)TestStudent.java,publicclassTestStudentpublicstaticvoidmain(Stringargs)Students1=newStudent();s1.setName(張三);s1.setSex(男);s1.setStuID(20080201);Student
7、s2=newStudent(李四,男,20080301);,15,執(zhí)行下列代碼的內(nèi)存分配1,,Students1=newStudent();,對(duì)象初始化變量值為該變量數(shù)據(jù)類(lèi)型的默認(rèn)值,16,執(zhí)行下列代碼的內(nèi)存分配2,s1.setName(張三);s1.setSex(男);s1.setStuID(20080201);,,,堆棧內(nèi)存(在程序空間內(nèi)),堆內(nèi)存(附加內(nèi)存在程序空間外),0X99F31244,s1,,17,執(zhí)行下列代碼的內(nèi)存分配3,Students2=newStudent(李四,男,20080301);,,,堆棧內(nèi)存(在程序空間內(nèi)),堆內(nèi)存(附加內(nèi)存在程序空間外),,,stuID,18,
8、3.6對(duì)象的使用,成員變量的引用引用格式:引用對(duì)象名.變量名如:Students1=newStudent();s1.name=“張三”;成員方法的調(diào)用調(diào)用格式:引用對(duì)象名.方法名(實(shí)際參數(shù)列表)如:s1.setName(張三);,19,類(lèi)中變量的作用域,成員變量的作用域參數(shù)和方法中定義變量的作用域用語(yǔ)句塊中定義變量的作用域成員變量與方法中定義的變量同名時(shí)的情況,20,classStudentStringname;charsex;intstuID;publicStudent()publicStudent(StringstuName,charsex,intstuID)name=stuName;th
9、is.sex=sex;this.stuID=stuID;publicvoidsetName(StringstuName)name=stuName;publicvoidsetSex(charsex)this.sex=sex;publicvoidsetStuID(intstuID)this.stuID=stuID;publicstaticvoidmain(Stringargs)Students=newStudent30;for(inti=0;i
10、法,for語(yǔ)句塊中的變量i的作用域僅局限于該for語(yǔ)句塊,成員變量sex與方法中定義的變量sex同名時(shí),成員變量在該方法中被隱藏,若要引用,則用this.變量名,例3-5類(lèi)中變量的作用域的例子,21,調(diào)用方法的參數(shù)傳遞方式,參數(shù)傳遞方式是值傳遞,即把實(shí)際參數(shù)的值傳遞給形式參數(shù)參數(shù)是基本數(shù)據(jù)類(lèi)型時(shí),參數(shù)的傳遞為實(shí)際值參數(shù)是引用類(lèi)型時(shí),參數(shù)的傳遞為引用對(duì)象的地址值傳遞,22,例3-6:方法調(diào)用的參數(shù)傳遞,publicclassPassTestfloatptValue;//參數(shù)類(lèi)型是基本類(lèi)型publicvoidchangeInt(intvalue)value=55;//參數(shù)類(lèi)型是引用型,并且方法中改
11、了變參數(shù)的值publicvoidchangeStr(Stringvalue)value=newString(different);//參數(shù)類(lèi)型是引用型,并且方法中改了變參數(shù)所指向?qū)ο蟮某蓡T變量值publicvoidchangeObjValue(PassTestref)ref.ptValue=99.0f;,23,publicstaticvoidmain(Stringargs)Stringstr;intval;//創(chuàng)建PassTest的對(duì)象PassTestpt=newPassTest();//測(cè)試基本類(lèi)型參數(shù)的傳遞val=11;pt.changeInt(val);System.out.printl
12、n(Intvalueis:+val);//測(cè)試引用類(lèi)型參數(shù)的傳遞str=newString(Hello);pt.changeStr(str);System.out.println(Strvalueis:+str);//測(cè)試引用類(lèi)型參數(shù)的傳遞pt.ptValue=101.0f;pt.changeObjValue(pt);System.out.println(Ptvalueis:+pt.ptValue);,24,分析1:基本類(lèi)型參數(shù)的傳遞,val=11;pt.changeInt(val);System.out.println(Intvalueis:+val);,publicvoidchangeIn
13、t(intvalue)value=55;,,Val的值11傳遞給value,11行調(diào)用第4行的方法changeInt,value值的改變不影響val值17行的輸出結(jié)果為:Intvalueis:11,25,分析2:測(cè)試引用類(lèi)型String參數(shù)的傳遞,str=newString(Hello);pt.changeStr(str);System.out.println(Strvalueis:+str);,publicvoidchangeStr(Stringvalue)value=newString(different);,str的引用地址值傳遞給value,26行調(diào)用第8行的方法changeStr,v
14、alue值的改變也不影響str值27行的輸出結(jié)果為:Strvalueis:Hello,,26,分析3:測(cè)試引用類(lèi)型PassTest參數(shù)的傳遞,pt.ptValue=101.0f;pt.changeObjValue(pt);System.out.println(Ptvalueis:+pt.ptValue);,publicvoidchangeObjValue(PassTestref)ref.ptValue=99.0f;,pt的引用地址值傳遞給ref,30行調(diào)用第12行的方法changeObjValue,ref對(duì)成員變量值的改變也影響調(diào)用參數(shù)pt的成員變量值27行的輸出結(jié)果為:Ptvalueis:9
15、9.0,,27,課后練習(xí):仔細(xì)閱讀下面的程序,輸出結(jié)果是什么?,classValHoldpublicinti=10;publicclassObParmpublicstaticvoidmain(Stringargv)ObParmo=newObParm();o.amethod();publicvoidamethod()inti=99;ValHoldv=newValHold();v.i=30;another(v,i);System.out.print(v.i);,publicvoidanother(ValHoldv,inti)i=0;v.i=20;ValHoldvh=newValHold();v=vh;System.out.print(v.i);System.out.print(i);,