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

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論