版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
4.1面向?qū)ο蟪绦蛟O(shè)計概述面向?qū)ο蟪绦蛟O(shè)計(ObjectOrientedProgramming,OOP)是一種計算機(jī)編程架構(gòu)。從二十世紀(jì)九十年代開始逐漸成為主流的編程思想,相對于面向過程語言(以C語言為代表),它的抽象程度更高,更接近人類的思維方式。面向?qū)ο蟪绦蛟O(shè)計以對象為核心。認(rèn)為程序由一系列對象組成,萬事萬物皆對象(EverythingisObject)。類是對現(xiàn)實(shí)世界的抽象。面向?qū)ο蟪绦蛟O(shè)計是一種較為先進(jìn)的程序設(shè)計思想。兩個重要概念:類與對象。三大特征:封裝性、繼承性和多態(tài)性。1.封裝性封裝性有兩種表現(xiàn)形式:一種是類本身,類中封裝了同一類事物所具有的特征(屬性)和行為(方法),另一種是通過訪問權(quán)限修飾符來控制類中哪些成員是否可以被訪問(可見性)。2.繼承性繼承講的是一種程序塊之間的代碼重用性關(guān)系。Java語言中的繼承滿足單繼承關(guān)系。3.多態(tài)性多態(tài)性是指相同的行為(方法),在不同情況下會產(chǎn)生不同形態(tài)的結(jié)果。靜態(tài)多態(tài)和方法重載有關(guān),在程序編譯階段完成的多態(tài)。動態(tài)多態(tài)和方法重寫有關(guān),在運(yùn)行階段完成的多態(tài)。4.2類類是組成Java程序的基本要素,一類事物和另外一類事物之間總有本質(zhì)的區(qū)別。類就是用來描述一類事物共同擁有的基本特征(屬性)和行為特征(方法)的復(fù)合體。類也是用來產(chǎn)生具體該類事物(又稱實(shí)例或?qū)ο?的模板。類的定義包括兩部分:類的聲明和類體?;靖袷饺缦拢?[修飾符]class類名{ 類體}訪問權(quán)限修飾符有兩種public和默認(rèn),用來控制類如何訪問。類體中定義了該類的成員,包括屬性和方法兩部分內(nèi)容,也可以只有一部分或者類體為空。4.2.1屬性概述屬性(又稱為成員變量),是用來描述同一類事物的基本特征,它的定義如下:[修飾符]數(shù)據(jù)類型屬性名;例如:privateintage;修飾符,可以是訪問權(quán)限修飾符(有四種public、protected、默認(rèn)和private),或者類修飾符static,或者最終修飾符final等。static修飾的屬性被稱為類屬性,非static修飾的屬性被稱為實(shí)例屬性。1.方法的聲明方法是用來描述同一類事物的行為特性,方法的定義由兩部分組成:方法聲明和方法體。[修飾符]返回數(shù)據(jù)類型方法名([參數(shù)列表]){
方法體
[return語句]}例如方法1: publicintadd(inta,intb){
returna+b;
}或者方法2:
publicvoidadd(inta,intb){
System.out.println(a+b);
}①修飾符,可以是訪問權(quán)限修飾符,或者類修飾符static,或者最終修飾符final等。②返回數(shù)據(jù)類型。如果方法體中有return語句時,return返回的數(shù)據(jù)類型即是返回數(shù)據(jù)類型。如果方法體中沒有return語句時,該返回數(shù)據(jù)類型用void來替代。③方法名,要求符合標(biāo)識符的定義,最好滿足“駝峰式”編碼規(guī)則,即首字符小寫,遇到新單詞時,單詞首字符大寫,如:getName(),setAge()等。④參數(shù)列表,為可選項。如果括號中為空,該方法稱為無參方法;如果有參數(shù)列表時,該方法稱為有參方法,需要滿足的格式為:(參數(shù)類型1參數(shù)名1,參數(shù)類型2參數(shù)名2...參數(shù)類型n參數(shù)名n),參數(shù)列表中的參數(shù)也叫做形參。參數(shù)類型和參數(shù)名稱之間需要有空格,參數(shù)和參數(shù)之間用逗號分隔。2.方法的調(diào)用方法需要先聲明,后調(diào)用。方法是通過方法名和參數(shù)列表來調(diào)用的。例如方法1中:inti=add(2,3);按照參數(shù)的位置,把2賦值給參數(shù)a,把3賦值給參數(shù)b。因為方法1有返回結(jié)果,可以用變量接收方法返回的結(jié)果。參數(shù)調(diào)用時傳遞給形參的參數(shù)叫做實(shí)參。例如方法2中:add(2,3);同樣按照參數(shù)的位置傳遞參數(shù)。因為方法2沒有返回結(jié)果,這個時候如果非要用變量來接收的話,就會出現(xiàn)編譯錯誤。4.2.3創(chuàng)建類【例4-1】創(chuàng)建人類。01publicclassPerson{02 Stringname;03 intage;04 doubleheight;0506 publicvoidsay(){07 System.out.println("Hello"+name);08 }0910 publicvoidwalk(){11 System.out.println("walk");12 }13}4.3對象類是一個抽象的概念,對象卻是具體的,也稱為類的實(shí)例。4.3.1對象的創(chuàng)建必須先創(chuàng)建類,才可以把類作為模板創(chuàng)建對象。常用創(chuàng)建對象的語法如下:
類名對象名=new構(gòu)造方法([參數(shù)列表]);4.3.2對象的使用創(chuàng)建好對象后,就可以使用該對象來調(diào)用屬性和方法了,語法如下:
對象名.屬性或者對象名.方法()在使用類創(chuàng)建對象以及使用對象時,代碼可以有兩種不同編寫方式:1.在本類中的方法中創(chuàng)建對象并使用,如:Person類的main方法中?!纠?-2】在Person類的方法中創(chuàng)建對象。見教材。2.在其他類的方法中創(chuàng)建對象并使用,通常使用一個測試類Test來驗證另外一個類是否定義正確。【例4-3】在Test類的main方法中調(diào)用Person類創(chuàng)建對象。見教材。特殊用法匿名對象是沒有對象名的對象,只能在創(chuàng)建時使用一次的對象,使用后立刻消亡。new構(gòu)造方法([參數(shù)列表]).方法名();或者new構(gòu)造方法([參數(shù)列表]).屬性;4.3.3構(gòu)造方法每個類中都必須有構(gòu)造方法。構(gòu)造方法的作用有兩個,分別是用來創(chuàng)建對象并對屬性進(jìn)行初始化。屬性初始化時,依然由屬性的類型決定,如age,int類型,默認(rèn)的初始化值為0。構(gòu)造方法有以下幾個基本特征:①構(gòu)成方法的訪問權(quán)限默認(rèn)和類的訪問權(quán)限一致,如類是public公有的,默認(rèn)構(gòu)造方法也是public,當(dāng)然編程人員也可以自行指定;②構(gòu)成方法在定義上沒有返回類型,也不要寫void;③構(gòu)成方法名必須和類名完全一致;④構(gòu)成方法不能直接調(diào)用,只能由內(nèi)存分配符(new)來調(diào)用。構(gòu)造方法常見的幾種錯誤寫法,以Person類為例:①publicvoidPerson(){}程序不會報錯,但它不是構(gòu)造方法,而是一個普通的方法。②publicperson(){}程序會出現(xiàn)編譯錯誤,因為它既不是構(gòu)造方法,也不是普通方法。如果編譯器發(fā)現(xiàn)某個類中有構(gòu)造方法,這時編譯器就不會自動地給這個類增加一個空構(gòu)造方法了?!纠?-4】Person類中有自定義的構(gòu)造方法。見教材。在一個類中定義了多個構(gòu)造方法,只要是參數(shù)列表不同(參數(shù)類型或參數(shù)個數(shù)或參數(shù)位置不同),被稱為構(gòu)造方法的重載。構(gòu)造方法的形式?jīng)Q定如何創(chuàng)建對象。有幾種構(gòu)造方法,就可以通過幾種方式創(chuàng)建對象?!纠?-5】多個構(gòu)造方法的Person類和改進(jìn)的Test類。見教材。4.3.4對象的內(nèi)存分配棧內(nèi)存中用來保存對象名,即該對象在堆內(nèi)存中的首地址。堆內(nèi)存中用來保存對象的屬性,即存儲一個對象的內(nèi)存分配大小主要是由實(shí)例屬性決定。以【例4-5】為例,講解Person對象創(chuàng)建的過程中,內(nèi)存空間的分配過程。4.4變量的種類變量按照其作用范圍(生存周期的長短),可以分三種:局部變量,實(shí)例變量(也稱屬性)和類變量。實(shí)例變量和類變量因為都是在類中,方法外聲明,也被稱為類中的成員變量。4.4.1局部變量在方法內(nèi)定義的變量被稱為局部變量,包括方法的參數(shù)。局部變量只可以作用在定義的方法或者方法內(nèi)的代碼塊中使用,作用范圍在三種變量中最小。局部變量在使用時必須由編程人員初始化【例4-6】局部變量的使用01publicclassDemo4_6{02 publicstaticvoidmain(String[]args){03 inta;04 System.out.println(a);05 for(inti=0;i<3;i++){06 System.out.println(i);07 }08 System.out.println(i);09 }10}4.4.2實(shí)例變量實(shí)例變量也被稱為屬性,是在類中、方法外定義的非static修飾的變量。它是在創(chuàng)建對象時產(chǎn)生,并由系統(tǒng)自動按照變量的數(shù)據(jù)類型進(jìn)行初始化,隨著對象的消亡而消亡。實(shí)例變量只可以在對象存活時使用,作用范圍在三種變量中居中。實(shí)例變量是每個對象獨(dú)有的變量。每個對象所占內(nèi)存空間的大小主要是由類中的實(shí)例變量決定。實(shí)例變量的使用方式為:對象名.實(shí)例變量(屬性)【例4-7】實(shí)例變量的使用Person類01publicclassPerson{02 Stringname;03 intage;04 doubleheight;05}Test類01publicclassTest{02 publicstaticvoidmain(String[]args){03 Personp1=newPerson();04 System.out.println(+""+p1.age+""+p1.height);05 ="zhangsan";06 p1.age=18;07 p1.height=1.73;08 System.out.println(+""+p1.age+""+p1.height);09 Personp2=newPerson();10 System.out.println(+""+p2.age+""+p2.height);11 }12}4.4.3類變量類變量也被稱為靜態(tài)變量,是在類中、方法外定義的由static修飾的變量。它是在類加載時由系統(tǒng)自動創(chuàng)建,并按照數(shù)據(jù)類型賦初值,而這個時候?qū)ο筮€沒有產(chǎn)生,類變量存放在內(nèi)存中的方法區(qū),只要類還在內(nèi)存中,類變量就一直存在,所以在三種變量的作用范圍中最大。類變量是讓多個對象共用的變量。類變量的使用方式有三種:①在本類中可以直接通過類變量名直接訪問;②可以通過類名訪問:類名.類變量;③可以通過對象名訪問:對象名.類變量;【例4-8】類變量在本類中的使用01publicclassPerson{02 Stringname;03 intage;04 doubleheight;05 staticStringcountry="china";06 publicstaticvoidmain(String[]args){07 System.out.println(country);//china08 System.out.println(Person.country);//china09 Personp1=newPerson();10 System.out.println(p1.country);//china11 }12}【例4-9】類變量在其他類中的使用01publicclassTest{02 publicstaticvoidmain(String[]args){03 System.out.println(Person.country);//china04 Personp1=newPerson();05 System.out.println(p1.country);//china06 }07}【例4-10】多個對象共用類變量01publicclassTest{02 publicstaticvoidmain(String[]args){03 Personp1=newPerson();04 p1.country="中國";05 Personp2=newPerson();06 System.out.println(p2.country);//中國07 System.out.println(Person.country);//中國 08 }09}4.5方法方法按照是否有static類修飾符,可以分為兩種:實(shí)例方法(簡稱方法)和類方法。實(shí)例方法可以讓多個對象共用的方法,而類方法可以直接訪問,對象是否存在不影響類方法的使用。4.5.1實(shí)例方法和this實(shí)例方法是可以由多個對象共用的方法。重看【例4-2】中的實(shí)例方法的定義,如下:Person類中的say()方法publicvoidsay(){ System.out.println("Hello"+name);}...p1.say();p2.say();...思考:系統(tǒng)如何知道是哪個對象在調(diào)用實(shí)例方法say()呢?解釋:是通過this關(guān)鍵字來區(qū)分是哪個對象調(diào)用的實(shí)例方法,this表示當(dāng)前對象,即方法是哪個對象調(diào)用的,this就指代的是哪個對象。Person類中的say()方法經(jīng)過編譯后補(bǔ)全的代碼如下:publicvoidsay(){ System.out.println("Hello"+);}this.通常情況下會省略。以【例4-2】中say()方法的調(diào)用為例,內(nèi)存圖如下。this的用法有兩種:this.和this()。this.表示當(dāng)前對象,通常可以省略。只有一種情況不可以省略,即實(shí)例變量和局部變量重名時。this()可以完成同一個類中不同構(gòu)造方法之間的調(diào)用,this()必須是構(gòu)造方法中的第一行語句,注釋語句除外?!纠?-11】this.和this()的使用。見教材。說明:雖然調(diào)用了兩次構(gòu)造方法,但是只創(chuàng)建了一個對象。創(chuàng)建對象的數(shù)量由new內(nèi)存分配符調(diào)用的次數(shù)決定。在本例中只調(diào)用了一次new運(yùn)算符,所以只創(chuàng)建了一個對象。4.5.2類方法用static修飾的方法是類方法(又稱靜態(tài)方法)。類方法在內(nèi)存中加載的時間比實(shí)例方法要早,當(dāng)類的字節(jié)碼文件被加載到內(nèi)存時,類方法就被分配了相應(yīng)的入口訪問地址;而實(shí)例方法,只有當(dāng)類創(chuàng)建了對象后,才分配入口地址。無論是類變量還是類方法,其加載的優(yōu)先級都比實(shí)例變量和實(shí)例方法的要高,加載順序如下:類變量>類方法>實(shí)例變量>實(shí)例方法綜上所述,實(shí)例方法可以直接訪問類變量、類方法和實(shí)例變量,但是類方法可以直接訪問類變量,不可以直接訪問實(shí)例變量和實(shí)例方法,但是卻可以通過創(chuàng)建對象后間接訪問實(shí)例變量和實(shí)例方法。類方法的訪問方式與類變量類似,也有三種:①在本類中可以直接通過類方法名訪問;②可以通過類名訪問:類名.類方法名();③可以通過對象名訪問:對象名.類方法名();【例4-12】類方法在本類中的使用。見教材。說明:類方法中不可以直接訪問實(shí)例變量,也不能出現(xiàn)this(當(dāng)前對象)或者super(父類對象)?!纠?-13】類方法在其他類中的使用。見教材。4.5.3傳遞參數(shù)在Java語言中,方法傳遞參數(shù)主要有兩種形式:基本數(shù)據(jù)類型的參數(shù)傳值和引用數(shù)據(jù)類型的參數(shù)傳地址。1.傳值方法內(nèi)對參數(shù)的修改,通常不會帶到方法外。除非滿足兩個條件才可以把結(jié)果帶到方法外:①該方法有返回類型②方法外有變量接收該方法的返回結(jié)果?!纠?-14】基本類型參數(shù)的傳值01publicclassTest{02 publicstaticvoidmodify(inta){03 a++;04 System.out.println("modify()中的a:"+a);05 }06 publicstaticvoidmain(String[]args){07 inta=10;08 modify(a);09 System.out.println("main()中的a:"+a);10 }11}【例4-15】基本類型參數(shù)的傳值并返回結(jié)果01publicclassTest{02 publicstaticintmodify(inta){03 a++;04 System.out.println("modify()中的a:"+a);05 returna;06 }07 publicstaticvoidmain(String[]args){08 inta=10;09 a=modify(a);10 System.out.println("main()中的a:"+a);11 }12}2.轉(zhuǎn)地址除了8種基本數(shù)據(jù)類型以外,其他的都是引用數(shù)據(jù)類型。引用數(shù)據(jù)類型包括類、對象、數(shù)組等。方法的參數(shù)如果是引用數(shù)據(jù)類型,在方法調(diào)用時,實(shí)參會把引用(內(nèi)存地址)傳遞給形參。這時,實(shí)參與形參指向同一塊內(nèi)存。即使該方法沒有返回類型,也可以把方法內(nèi)的修改傳遞到該方法外。分別以數(shù)組和Person對象為例,講解引用類型參數(shù)傳遞地址的過程?!纠?-16】引用類型數(shù)組為參數(shù)的傳地址01publicclassTest{02 publicstaticvoidmodify(int[]a){03 a[0]++;04 System.out.println("modify()中的a[0]:"+a[0]);05 }06 publicstaticvoidmain(String[]args){07 int[]a={1,2,3};08 modify(a);09 System.out.println("main()中的a[0]:"+a[0]);10 }11}【例4-17】引用類型Person對象為參數(shù)的傳地址Person類略Test類01publicclassTest{02 publicstaticvoidmodify(Personp){03 ="wangwu";04 }05 publicstaticvoidmain(String[]args){06 Personp=newPerson("zhangsan",18,1.73);07 modify(p);08 System.out.println();09 }10}4.5.4方法重載方法重載的定義規(guī)則如下:①在一個類中(或者具有繼承關(guān)系的父子類中)多個方法名相同;②方法的參數(shù)列表不同。參數(shù)列表主要看參數(shù)的類型是否完全一致,還包括參數(shù)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 皮膚黑色素瘤的臨床護(hù)理
- 《數(shù)字證書及公鑰》課件
- 化膿性鼻竇炎的健康宣教
- 天皰瘡的臨床護(hù)理
- 《單片機(jī)原理及應(yīng)用 》課件-第8章
- 《Java程序設(shè)計及移動APP開發(fā)》課件-第07章
- 手癬的臨床護(hù)理
- 變應(yīng)性接觸性皮炎的臨床護(hù)理
- 《齒輪西農(nóng)版》課件
- JJF(陜) 050-2021 光電式皮帶張力計校準(zhǔn)規(guī)范
- 軟件項目開發(fā)投標(biāo)文件技術(shù)方案
- 《設(shè)計質(zhì)量保證措施》
- 2024年秋季新人教PEP版英語三年級上冊全冊教案
- 2022年農(nóng)業(yè)銀行法人信貸理論知識考試題庫(含答案)
- 在線招聘平臺人才匹配算法優(yōu)化與應(yīng)用推廣
- 重慶B卷歷年中考語文現(xiàn)代文閱讀之非連續(xù)性文本閱讀5篇(含答案)(2003-2023)
- DB62T 4872-2024 養(yǎng)老護(hù)理員培訓(xùn)基地建設(shè)規(guī)范
- 冬季防凍防滑防火安全教育主題班會市公開課一等獎省賽課微課金獎?wù)n件
- 四川省綿陽市2023-2024學(xué)年高一上學(xué)期期末檢測英語試題(解析版)
- 《生活中的比》(教學(xué)設(shè)計)-2023-2024學(xué)年北師大版數(shù)學(xué)六年級上冊
- 都江堰衛(wèi)生系統(tǒng)考試真題
評論
0/150
提交評論