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