2023年面向?qū)ο蟪绦蛟O(shè)計(jì)第一部分_第1頁(yè)
2023年面向?qū)ο蟪绦蛟O(shè)計(jì)第一部分_第2頁(yè)
2023年面向?qū)ο蟪绦蛟O(shè)計(jì)第一部分_第3頁(yè)
2023年面向?qū)ο蟪绦蛟O(shè)計(jì)第一部分_第4頁(yè)
2023年面向?qū)ο蟪绦蛟O(shè)計(jì)第一部分_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章面向?qū)ο蟪绦蛟O(shè)計(jì)1、類2、對(duì)象3、接口4.1編程語(yǔ)言的幾個(gè)發(fā)展階段機(jī)器語(yǔ)言如:匯編語(yǔ)言過(guò)程語(yǔ)言 如:c語(yǔ)言,Fortran語(yǔ)言等使用面向過(guò)程語(yǔ)言,人們只需按著自己的意圖來(lái)編寫各個(gè)函數(shù),語(yǔ)言的語(yǔ)法更接近人們的自然語(yǔ)言,所以,習(xí)慣上也稱過(guò)程語(yǔ)言是高級(jí)語(yǔ)言.但是,無(wú)論那種高級(jí)語(yǔ)言編寫的源文獻(xiàn),計(jì)算機(jī)都不能直接執(zhí)行,由于計(jì)算機(jī)只能直接辨認(rèn),執(zhí)行機(jī)器指令.因此,必須把源文獻(xiàn)轉(zhuǎn)換成機(jī)器指令,然后計(jì)算機(jī)去執(zhí)行相應(yīng)的機(jī)器指令.將高級(jí)語(yǔ)言編寫的源程序轉(zhuǎn)化成機(jī)器指令,經(jīng)常使用下列兩種方式:(1)編譯方式?Compilation:針對(duì)當(dāng)前的機(jī)器解決器芯片,將源程序所有翻譯成機(jī)器指令,稱做目的程序,再將目的程序交給計(jì)算機(jī)執(zhí)行.(2)解釋方式 Interpretat(yī)ion:這種方式不產(chǎn)生整個(gè)的目的程序,而是根據(jù)當(dāng)前的機(jī)器解決器芯片,邊翻譯邊執(zhí)行,翻譯一句執(zhí)行一句.Java語(yǔ)言的解決方式既不是第1種也不是第二種,Java語(yǔ)言的發(fā)明發(fā)明之處在于,它不針對(duì)特定的CPU芯片進(jìn)行編譯。Java提供的編譯器把源程序編譯成稱做字節(jié)碼的一個(gè)中間代碼.字節(jié)碼是很接近機(jī)器碼的文獻(xiàn),可以在提供了Java虛擬機(jī)JVM的任何系統(tǒng)上被解釋執(zhí)行.因此,Java本質(zhì)上是解釋執(zhí)行的程序,當(dāng)字節(jié)碼加載到內(nèi)存之后,再由Java的解釋器對(duì)字節(jié)碼按上述2的解釋方式執(zhí)行,即翻譯一句,執(zhí)行一句,不產(chǎn)生整個(gè)的機(jī)器代碼程序,翻譯過(guò)程假如不出現(xiàn)錯(cuò)誤,就一直進(jìn)行到所有執(zhí)行完畢,否則將在錯(cuò)誤處停止執(zhí)行.同一個(gè)程序,假如是解釋執(zhí)行的,那么它的運(yùn)營(yíng)速度通常會(huì)比被編譯成可執(zhí)行的機(jī)器代碼的運(yùn)營(yíng)速度慢些.但是,對(duì)Java來(lái)說(shuō),兩者的差別不太大,Java的字節(jié)碼通過(guò)仔細(xì)設(shè)計(jì),很容易便能使用.JIT即時(shí)編譯方式編譯技術(shù)將字節(jié)碼直接轉(zhuǎn)化成高性能的本地機(jī)器碼,Sun公司在Java2發(fā)行版中提供了這樣一個(gè)字節(jié)碼編譯器:?---JIT(JustInTime),它是Java虛擬機(jī)的一部分.Java運(yùn)營(yíng)系統(tǒng)在提供JIT的同時(shí)仍具有平臺(tái)獨(dú)立性,因而”高效且跨平臺(tái)”對(duì)java來(lái)說(shuō)不再矛盾.?假如把Java的源文獻(xiàn)比做”漢語(yǔ)”的話,字節(jié)碼就相稱于”世界語(yǔ)”,世界語(yǔ)不和具體的”國(guó)家”有關(guān),只要這個(gè)”國(guó)家”提供了”翻譯”,就可以再快速地把世界語(yǔ)翻譯成本地語(yǔ)言.面向?qū)ο缶幊屉S著計(jì)算機(jī)硬件設(shè)備功能的進(jìn)一步提高,使得基于對(duì)象的編程成為也許.基于對(duì)象的編程更加符合人的思維模式,編寫的程序更加健壯和強(qiáng)大,更重要的是,面向?qū)ο缶幊坦膭?lì)發(fā)明性的程序設(shè)計(jì).Java是面向?qū)ο笳Z(yǔ)言,它的源程序是由若干個(gè)類組成,源文獻(xiàn)是擴(kuò)展名為.java的文本文獻(xiàn).因此,要學(xué)習(xí)Java編程就必須學(xué)會(huì)如何去寫類,即如何用Java的語(yǔ)法去描述一類事物共有的屬性和功能.屬性通過(guò)變量來(lái)刻畫,功能通過(guò)方法來(lái)體現(xiàn),即方法操作屬性形成一定的算法來(lái)實(shí)現(xiàn)一個(gè)具體的功能.類把數(shù)據(jù)和對(duì)數(shù)據(jù)的操作封裝成一個(gè)整體.4.2類類是組成Java程序的基本要素.類封裝了一類對(duì)象的狀態(tài)和方法.類是用來(lái)定義對(duì)象的模板.類的實(shí)現(xiàn)涉及兩部分:類聲明和類體.基本格式為:class類名{ …??類體的內(nèi)容……}class是關(guān)鍵字,用來(lái)定義類.”class類名”是類的聲明部分,類名必須是合法的Java標(biāo)記符.兩個(gè)大括號(hào)以及之間的內(nèi)容是類體.4.2.1.類聲明以下是兩個(gè)類聲明的例子.classPeople{…}class植物{…}“classPeople”和”class植物”叫做類聲明”People”和”植物”分別是類名。類命名最佳遵守下列習(xí)慣:(1)假如類名使用拉丁字母,那么名字的首寫字母使用大寫字母,如Hello,Time,People等.(2)類名最佳見名得意,當(dāng)類名由幾個(gè)”單詞”復(fù)合而成時(shí),每個(gè)單詞的首寫字母使用大寫。如BeijingTime,AmericanGame,HelloChina等.4.2.2.類體寫類的目的是為了描述一類事物共有的屬性和功能,描述過(guò)程由類體來(lái)實(shí)現(xiàn).類聲明之后的一對(duì)大括號(hào)“{”,“}”以及它們之間的內(nèi)容稱做類體,大括號(hào)之間的內(nèi)容稱做類體的內(nèi)容.類體的內(nèi)容由兩部分構(gòu)成:?一部分是變量的定義,用來(lái)刻畫屬性;另一部分是方法的定義,用來(lái)刻畫功能.下面是一個(gè)類名為”梯形”的類,類體內(nèi)容的變量定義部分定義了4個(gè)float類型的變量”上底”,”下底”,”高”和”面積”,方法定義部分定義了兩個(gè)方法”計(jì)算面積”和”修改高”.class梯形{?float上底,下底,高,面積;//變量定義部分. float計(jì)算面積()//方法定義?{ ?面積=(上底+下底)*高/2.0f;??return面積; }?void修改高(floath)//方法定義?{ 高=h; }}4.2.3.成員變量和局部變量我們已經(jīng)知道類體分為兩部分:.?變量定義部分所定義的變量被稱為類的成員變量.?在方法體中定義的變量和方法的參數(shù)被稱為局部變量.成員變量和局部變量的類型可以是Java中的任何一種數(shù)據(jù)類型,涉及基本類型:整型、浮點(diǎn)型、字符型,布爾型。 引用類型:數(shù)組類型和對(duì)象。 對(duì)象也稱作類類型變量。classPeople{ intboy;floata[];?voidf(){??booleancool; ?Workmanzhangboy; ?……}}classWorkman{?doublex;Peoplezhiwei; ……}?People類的成員變量a是浮點(diǎn)數(shù)組型變量,cool是局部量,zhangboy是類類型(對(duì)象)局部變量,類Wo(hù)rkman中的zhiwei是類類型變量,即對(duì)象.classSun{ intdistance; intfind() { ??inta=12;? distance=a;//合法,distance在整個(gè)類內(nèi)有效.? returndistance; }??voidg() {? ?inty; ?y=a;//非法,由于a以失效,而方法g內(nèi)又沒有定義變量a }}(2)成員變量在整個(gè)類內(nèi)都有效,局部變量只在定義它的方法內(nèi)有效.成員變量與它在類體中書寫的先后位置無(wú)關(guān),例如,前述的梯形類也可以寫成:class梯形{float上底,面積;//成員變量的定義.float計(jì)算面積(){面積=(上底+下底)*高/2.0f;return面積;}float下底;//成員變量的定義.void修改高(float(yī)h)//方法定義.{高=h;}float高;//成員變量的定義.}注意:但不提倡把成員變量的定義分散地寫在方法之間或類體的最后,人們習(xí)慣先介紹屬性再介紹功能.(3)成員變量又分為實(shí)例成員變量(簡(jiǎn)稱實(shí)例變量)和類成員變量(簡(jiǎn)稱類變量)例如: classdog?{? float(yī)x;??staticinty; ……?} 其中x是實(shí)例變量,而y是類變量.假如成員變量的類型前面加上關(guān)鍵字static,這樣的成員變量稱做是類變量或靜態(tài)成員變量.再學(xué)習(xí)過(guò)對(duì)象之后,就會(huì)知道實(shí)例變量和類變量的區(qū)別.(4)假如局部變量的名字與成員變量的名字相同,則成員變量被屏蔽,即這個(gè)成員變量在這個(gè)方法內(nèi)暫時(shí)失效.classTom{ intx=98,y;voidf(){??intx=3;??y=x; //y得到的值是3,不是98.假如方法f中沒有”intx=3;”語(yǔ)句,y的值將是98.}}(5)我們已經(jīng)知道,假如局部變量的名字與成員變量的名字相同,,則成員變量被屏蔽.?這時(shí)假如想在該方法內(nèi)使用成員變量,必須使用關(guān)鍵字this. class三角形?{??floatsideA,sideB,sideC,lengthSum; voidsetSide(float(yī)sideA,floatsideB,floatsideC) {? this.sideA=sideA;???this.sideB=sideB;?? this.sideC=sideC;? }?} this.sideA,this.sideB,this.sideC就分別表達(dá)成員變量sideA,sideB,sideC.4.2.4.方法我們已經(jīng)知道一個(gè)類的類體由兩部分組成:變量的定義和方法的定義.方法的定義涉及兩部分:方法聲明和方法體一般格式為:方法聲明部分?{ ?方法體的內(nèi)容?}(1)方法聲明.最基本的方法聲明涉及方法名和方法的返回類型,如:floatarea(){…}方法返回的數(shù)據(jù)的類型可以是任意的Java數(shù)據(jù)類型,當(dāng)一個(gè)方法不需要返回?cái)?shù)據(jù)時(shí),返回類型必須是void.很多的方法聲明中都給出方法的參數(shù),參數(shù)是用逗號(hào)隔開的一些變量聲明.方法的參數(shù)可以是任意的Java數(shù)據(jù)類型.方法的名字必須符合標(biāo)記符規(guī)定.在給方法起名字時(shí)應(yīng)遵守良好的習(xí)慣:名字假如使用拉丁字母,首寫字母使用小寫.假如由多個(gè)單詞組成,從第2個(gè)單詞開始的其它單詞的首寫字母使用大寫。 例如?floatgetTrangleArea()?voidsetCircleRadius(doubleradius)等.(2)方法體?方法聲明之后的一對(duì)大括號(hào)”{“,”}”以及之間的內(nèi)容稱做方法的方法體.方法體的內(nèi)容涉及局部變量的定義和合法的Java語(yǔ)句。 intgetSum(intn) { ?intsum=0;? for(inti=1;i<=n;i++)? {???sum=sum+i;??}? returnsum; }方法參數(shù)在整個(gè)方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開始有效.寫一個(gè)方法和C語(yǔ)言中寫一個(gè)函數(shù)完全類似,只但是在這里稱做方法罷了.局部變量的名字必須符合標(biāo)記符規(guī)定,遵守習(xí)慣名字假如使用拉丁字母,首寫字母使用小寫.假如由多個(gè)單詞組成,從第2個(gè)單詞開始的其它單詞的首寫字母使用大寫.4.2.5.方法重載方法重載是指一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同.下面的Area類中g(shù)etArea方法是一個(gè)重載方法.(1).如何創(chuàng)建對(duì)象Objectobj=newObject()Object表達(dá)的要?jiǎng)?chuàng)建的對(duì)象的類型obj表達(dá)的是創(chuàng)建的對(duì)象的名稱new是創(chuàng)建對(duì)象的關(guān)鍵字Object()是創(chuàng)建對(duì)象所使用的構(gòu)造方法(2).假如是用Objectobj表達(dá)聲明一個(gè)對(duì)象但是并沒有為該對(duì)象分派內(nèi)存空間。什么是構(gòu)造方法:構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,并且不返回任何數(shù)據(jù)類型(3).構(gòu)造方法是創(chuàng)建對(duì)象的時(shí)候調(diào)用的。(4).每一個(gè)類都有一個(gè)默認(rèn)的構(gòu)造方法(使用javap命令來(lái)檢查一個(gè).class文獻(xiàn)的結(jié)構(gòu))格式為:publicpackagename.ClassName()即共有的無(wú)參的例如:publicStudent(){}(5).假如我們?cè)谝粋€(gè)類中定義了一個(gè)有參數(shù)的構(gòu)造方法那么默認(rèn)的構(gòu)造方法就不存在了。(6)假如創(chuàng)建了一個(gè)對(duì)象,并且類中聲明的屬性沒有初始值那么java會(huì)為其分派默認(rèn)值:對(duì)于引用類型為null(空的)對(duì)于基本數(shù)據(jù)類型int為0、float為0.0、boolean為false、char為空字符。(7).在一個(gè)類中可以有多個(gè)構(gòu)造方法,那么這些方法的參數(shù)必須不同(個(gè)數(shù)不同,類型不同,與參數(shù)名字無(wú)任何關(guān)系)方法重載:方法重載是指一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同.方法重載示例:classArea{?floatgetArea(floatr)?{? return3.14f*r*r; } doublegetArea(floatx,inty) { ?returnx*y?} floatgetArea(intx,floaty)?{??returnx*y; }?doublegetArea(floatx,float(yī)y,floatz) { ?return(x*x+y*y+z*z)*2.0;?}}注:方法的返回類型和參數(shù)的名字不參與比較,也就是說(shuō)假如兩個(gè)方法的名字相同,即使類型不同,也必須保證參數(shù)不同.※※※4.2.6.構(gòu)造方法構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,并且不返回任何數(shù)據(jù)類型.class梯形{?float上底,下底,高; 梯形()?{??上底=60;??下底=100; 高=20; }?梯形(floatx,inty,floath)?{ ?上底=x; ?下底=y(tǒng);? 高=h;?}}4.2.7.類方法和實(shí)例方法我們已經(jīng)知道,成員變量可分為實(shí)例變量和類變量.同樣,類中的方法也可分為實(shí)例方法和類方法,如classA{ inta; float(yī)max(floatx,floaty) {??……?}?staticfloatjerry()?{? ……?}}類A中的方法jerry和speak是類方法,max是實(shí)例方法,即方法聲明時(shí),方法類型前面不加關(guān)鍵字static的是實(shí)例方法,加static的是類方法.注意stat(yī)ic需放在方法的類型的前面.4.2.8.兩個(gè)值得注意的問題(1)對(duì)成員變量的操作只能放在方法中,方法可以對(duì)成員變量和方法體中自己定義的局部變量進(jìn)行操作.在定義類的成員變量時(shí)可以同時(shí)賦予初值,如:classA{ inta=12;?float(yī)b=12.56f;}但是不可以這樣做classA{ inta; floatb;?//a=12;非法,只能放在方法中 //b=12.56f;非法}但需要注意的是,實(shí)例方法既能對(duì)類變量操作也能對(duì)實(shí)例變量操作,而類方法只能對(duì)類變量進(jìn)行操作.如:classA{ inta;?staticintb;?voidf(intx,inty) { ? //a=x;合法. ?//b=y;合法. } staticvoidg(intz) {? //b=23;合法.??//a=z;非法. }}(2)一個(gè)類中的方法可以互相調(diào)用,實(shí)例方法可以調(diào)用該類中的其它方法;類中的類方法只能調(diào)用該類的類方法,不能調(diào)用實(shí)例方法.4.3對(duì)象我們已經(jīng)說(shuō)過(guò)類是創(chuàng)建對(duì)象的模板.當(dāng)使用一個(gè)類創(chuàng)建了一個(gè)對(duì)象時(shí),我們也說(shuō)我們給出了這個(gè)類的一個(gè)實(shí)例。4.3.1.創(chuàng)建對(duì)象創(chuàng)建一個(gè)對(duì)象涉及對(duì)象的聲明和為對(duì)象分派內(nèi)存兩個(gè)環(huán)節(jié).(1)、對(duì)象的聲明.?一般格式為:類的名字對(duì)象名字; 如:PeoplezhangPing?這里People是一個(gè)類的名字,zhangPing是我們聲明的對(duì)象的名字.(2)、為聲明的對(duì)象分派內(nèi)存.使用new運(yùn)算符和類的構(gòu)造方法為聲明的對(duì)象分派內(nèi)存,假如類中沒有構(gòu)造方法,系統(tǒng)會(huì)調(diào)用默認(rèn)的構(gòu)造方法(默認(rèn)的構(gòu)造方法是無(wú)參數(shù)的)如:zhangPing=newPeople();以下是兩個(gè)具體的例子。classXiyoujiRenwu{ floatheight,weight;?String

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論