Java面向?qū)ο蟪绦蛟O(shè)計課件_第1頁
Java面向?qū)ο蟪绦蛟O(shè)計課件_第2頁
Java面向?qū)ο蟪绦蛟O(shè)計課件_第3頁
Java面向?qū)ο蟪绦蛟O(shè)計課件_第4頁
Java面向?qū)ο蟪绦蛟O(shè)計課件_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java面向?qū)ο蟪绦蛟O(shè)計

2.1標識符、分隔符和關(guān)鍵字

3.1類的創(chuàng)建

類是組成Java程序的基本要素,也是Java中重要的引用數(shù)據(jù)類型。類封裝了一類對象的狀態(tài)屬性和行為方法,是類對象的原型。創(chuàng)建一個新類,就是創(chuàng)建一種新的數(shù)據(jù)類型,即引用數(shù)據(jù)類型。3.1.1類的聲明

類的實現(xiàn)包括兩部分:類聲明和類體?;靖袷綖椋?/語法格式:[<修飾符>]class<類名>[<extendsSuperclassName>][<implementsinterfaceNameList>]{[<成員變量聲明>][<構(gòu)造函數(shù)聲明>][<成員方法聲明>]}3.1.1類的聲明

其中修飾符可以是pubic、abstract或final,說明類的屬性。這個public關(guān)鍵字聲明了類可以在其它任何的類中使用;abstract關(guān)鍵字聲明了這個類不能被實例化;Final關(guān)鍵字聲明了類不能被繼承,即沒有子類了。l

class是關(guān)鍵字,用來定義類,類名必須是合法的Java標識符;extends是關(guān)鍵字,用來說明該類是SuperclassName.SuperclassName是該類的父類的名字;l

implements是關(guān)鍵字,用來聲明本類要執(zhí)行的一個或多個接口,interfaceNameList是本類所執(zhí)行的接口的名字列表,它們是以逗號分隔的。

兩個大括號以及之間的內(nèi)容是類體。3.1.2類體

類體是跟在類聲明的后面,它是嵌入在大括號“{”和“}”中間的。類體中定義該類中所有的變量和所支持的方法。例如:

classPerson{

intage;//成員變量

intgetAge(){//成員方法

returnage;} voidsetAge(inti){//成員方法

age=i;}}3.1.3成員變量和局部變量

類的狀態(tài)是由它的成員變量給出的,你可以在類體中聲明一個類的成員變量。

成員變量:在類體中,變量聲明部分所聲明的變量被稱為類的成員變量;

局部變量:在方法體中聲明的變量和方法中的參數(shù)被稱為局部變量。對類的成員變量來說,又可以分為實例成員變量和類成員變量,如果在聲明時,用修飾符static聲明的變量稱為類變量,在聲明時,沒有用修飾符static修飾的變量稱為實例變量。3.1.3成員變量和局部變量

成員變量的類型可以是Java中任意的數(shù)據(jù)類型,包括簡單類型、類、接口和數(shù)組。成員變量在類的定義中聲明,在一個類中成員變量的名字是唯一的。在創(chuàng)建對象的同時創(chuàng)建有關(guān)的成員變量,成員變量創(chuàng)建后系統(tǒng)自動對其進行默認初始化或顯式初始化。

成員變量依附于對象(局部變量)的存在而存在,具有與對象相同的生存期和作用域。例如:

publicclassPerson{privateintage;publicStringname=“Lila”;}成員變量的限定符

對于一個成員變量,可以使用不同的限定符,以限定不同的訪問權(quán)限。Private:變量可以被類中的代碼訪問Friend:變量可以被工程或組件中的代碼訪問Protected:可以被繼承的類訪問Public:適用于類外的代碼通常,使用Private關(guān)鍵字來聲明成員變量,使這些變量僅適用于每個類實例中的代碼。同時這種方式也符合類的封裝性。成員變量的限定符

對于一個成員變量,還可以使用下面的限定符:

static:

用來制訂一個變量使靜態(tài)變量(類變量),沒有static修飾的變量是實例變量。類變量既可以由類方法訪問,由可以右實例方法來訪問。

final:

用來聲明一個常量,作用相當于C語言中define命令,對于用final關(guān)鍵字修飾的常量,在程序中不能作修改,通常常兩用答謝字母。

volatile:用來聲明一個由多線程共享的變量,使得各線程對該變量的訪問能保持一致。定義和使用局部變量案例

publicclassTestvarible{ privateinti=1; publicvoidmethod1(){

inti=4,j=5; this.i=i+j; method2(7);} publicvoidmethod2(inti){

intj=8; this.i=i+j; System.out.println(this.i);} publicstaticvoidmain(String[]args){

Testvariblet=newTestvarible(); t.method1();}}定義和使用局部變量案例程序執(zhí)行的效果如圖所示。思考題:該例中哪些是局部變量和哪些是成員變量?并說明其作用域?3.1.4方法

對象的行為是由它的成員方法來執(zhí)行的,其它對象通過調(diào)用它的方法來訪問對象。在JAVA中,你可以在變量聲明之后再聲明類的成員方法。對類的成員變量來說,可以分為實例成員變量和類成員變量,同樣成員方法同樣可以分為實例成員方法和類成員方法。如果在聲明時,用修飾符static聲明的方法稱為類方法,在聲明時,沒有用修飾符static修飾的變量稱為實例方法。

方法的定義包括兩部分:方法的聲明和方法體。定義和使用方法

classTestmethod{doublex,y;staticfloatmark;floattotal(floata,floatb){floattotal;x=0.4;y=0.6;total=(float)(x*a+y*b);returntotal;}staticvoidsetmark(floati){mark=i;}staticfloatgetmark(){returnmark;}續(xù)

publicvoiddisplay(){System.out.println("Thetotalscore"+"="+mark);publicstaticvoidmain(String[]args){

Testmethodtm=newTestmethod(); mark=tm.total(67,98); tm.display(); tm.setmark(96); tm.display(); }}程序執(zhí)行的效果

該例中,方法setmark和getmark是類方法;方法total是實例方法,返回值是float類型,在方法被調(diào)用時,形式參數(shù)a,b用來接受外部輸入的數(shù)據(jù)(實際參數(shù))。3.1.5方法重載

方法重載(overloading)是指多個方法享有相同的名字,方法的參數(shù)列表必須不一樣,這里的不一樣可能是個數(shù),類型不一樣。重載和方法的返回值無關(guān),返回值可以相同,也可以不同。在同一個類中可以定義多個同名方法。如:classTestoverload{voidstudent();voidstudent(Stringstr);voidstudent(Stringstr,Stringn);booleanstudent(Stringstr,inta);}3.1.6構(gòu)造函數(shù)

在面向?qū)ο蟪绦蛘Z言中,創(chuàng)建對象的時候總是調(diào)用一個特定的方法,這個方法叫做構(gòu)造函數(shù)。在Java語言中,構(gòu)造函數(shù)特點是:構(gòu)造函數(shù)的名字必須與它所在的類的名字完全相同;構(gòu)造函數(shù)不返回任何數(shù)據(jù)類型,即它是void型,但不能寫void;構(gòu)造函數(shù)一般不能有編程人員顯示地直接調(diào)用,必須通過運算符new調(diào)用或者在創(chuàng)建對象時由系統(tǒng)自動調(diào)用。默認的構(gòu)造函數(shù)Java語言中,每個類都至少有一個構(gòu)造方法;如果類的定義者沒有顯式的定義任何構(gòu)造方法,系統(tǒng)將自動提供一個默認的構(gòu)造方法:默認構(gòu)造方法沒有參數(shù)默認構(gòu)造方法沒有方法體Java類中,一旦類的定義者顯式定義了一個或多個構(gòu)造方法,系統(tǒng)將不再提供默認的構(gòu)造方法;默認的構(gòu)造方法類的定義:publicclassPerson{ privateintage; publicvoidsetAge(intw){age=w;} }等價于:publicclassPerson{ privateintage publicPerson(){} publicvoidsetAge(intw){age=w;} }應(yīng)用舉例:publicclassTest{publicstaticvoidmain(Stringargs[]){Persond=newPerson();d.setAge(16);}}用于覆蓋范圍規(guī)則,代表當前對象本身。當一個方法需要激活它的對象時,即可以利用this實現(xiàn)該功能。因此,this可以看成是類對象的別名,使類中的隱藏數(shù)據(jù)以及方法可以引用。如:classCollege {inta; publicstaticvoidmain(Stringargs[]) {inta=6; Collegebb=newCollege();System.out.println("main().a="+a);System.out.println("bb.a="+bb.call());}3.1.7this的用法

續(xù)

intcall(){inta=9;this.a=a++;System.out.println("call().a="+a);returnthis.a;}}程序執(zhí)行的效果

3.2繼承

繼承(inheritance)的思想就是重用其它類中的方法和屬性來創(chuàng)建新類。利用繼承,可以先創(chuàng)建一個具有某些基本功能的一般類,然后將這些類作為基礎(chǔ)去創(chuàng)建具有特殊功能的類。由繼承而得到的類稱為子類(subclass),被繼承的類稱為父類或超類(superclass)。父類包括所有直接或間接被繼承的類。一個父類可以同時擁有多個子類,由于Java不支持多重繼承,所以一個子類只能擁有一個直接父類。在Java中,所有的類都是通過直接或間接繼承類java.lang.Object而得到的。類的繼承(1)為描述和處理個人信息,定義類Person:publicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}Person+name:String+age:int+birthDate:Date+getInfo():String類的繼承(2)為描述和處理學生信息,定義類Student:publicclassStudent{publicStringname;publicintage;publicDatebirthDate;publicStringschool;publicStringgetInfo(){...}}Student+name:String+age:int+birthDate:Date+school:String+getInfo():String類的繼承(3)通過繼承,簡化Student類的定義:publicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}publicclassStudentextendsPerson{publicStringschool;}Person+name:String+age:int+birthDate:Date+getInfo():StringStudent+school:String3.2.3成員變量的隱藏和方法的覆蓋

變量的隱藏:如果子類中定義的成員變量和父類中的成員變量完全相同,此時父類中的成員變量將被隱藏,這種現(xiàn)象稱為變量的隱藏。

方法的覆蓋:如果在子類中定義的方法和父類中定義的方法在名字、返回類型、參數(shù)個數(shù)和參數(shù)類型方面完全相同,此時父類中的方法將被隱藏,這種現(xiàn)象被稱為方法的覆蓋或重寫。案例見3-6,p69.3.2.4關(guān)鍵字static

在Java類中聲明變量、方法和內(nèi)部類時,可使用關(guān)鍵字static做為修飾符。static標記的變量或方法由整個類(所有實例)共享,如訪問控制權(quán)限允許,可不必創(chuàng)建該類對象而直接用類名加‘.’調(diào)用。static成員也稱類成員或靜態(tài)成員,如:類屬性、類方法、靜態(tài)方法等。應(yīng)用案例見p71例3-7,3-8。3.2.5關(guān)鍵字final和abstract

final的用法在Java中聲明類、屬性和方法時,可使用關(guān)鍵字final來修飾。final標記的類不能被繼承。final標記的方法不能被子類重寫。final標記的變量(成員變量或局部變量)即成為常量,只能賦值一次。final標記的成員變量必須在聲明的同時或在每個構(gòu)造方法中顯式賦值,然后才能使用。應(yīng)用案例見p73例3-9。3.2.5關(guān)鍵字final和abstract

abstract的用法

如果一個類在聲明時被關(guān)鍵字abstract所修飾,說明該類不能直接創(chuàng)建對象,這樣的類被稱為抽象類。抽象類往往是它的所有子類共有屬性的集合。如Java中的Number類就是一個抽象類。抽象類必須產(chǎn)生子類,由子類創(chuàng)建對象。

如果一個方法在聲明時被關(guān)鍵字abstract所修飾,那么該方法被稱為抽象方法。抽象方法只允許聲明,不允許實現(xiàn)。應(yīng)用案例見p74例3-10。3.2.6關(guān)鍵字super

在子類中隱藏了父類的成員變量或覆蓋了父類的方法后,常常還需要調(diào)用父類中被隱藏的變量和被覆蓋的方法,這是就需使用關(guān)鍵字super來訪問父類的變量和方法。關(guān)鍵字this用來引用當前對象,而關(guān)鍵字super用來引用當前對象的父類。使用關(guān)鍵字super不僅可以訪問父類中被隱藏成員變量和覆蓋的方法,而且還可以調(diào)用父類的構(gòu)造函數(shù)。應(yīng)用案例見p75例3-11。3.3包

由于Java編譯器為每個類生成一個字節(jié)碼文件,且文件名與public的類名相同,因此同名的類有可能發(fā)生沖突。為了解決這個問題,Java提供包(package)來管理類名空間和訪問保護機制。package語句package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。它的格式為:

packagepkg1[.pkg2[.pkg3…]];

舉例:Beauty.java

packagestudentbiggirl;publicclassBeauty{ publicvoiddisplay(){ System.out.println("I’vebigeyes"); }}Java編譯器把包對應(yīng)于文件系統(tǒng)的目錄管理,package語句中,用‘.’來指明包(目錄)的層次;

import語句為使用定義在不同包中的Java類,需用import語句來引入所需要的類。語法格式:

importpackage1[.package2…].(classname|*);應(yīng)用舉例:

importstudent.biggirl.Beauty;publicclassTestPackage{publicstaticvoidmain(Stringargs[]){Beautyb=newBeauty(); b.show(); }}3.4訪問控制ModiferSameClassSamePackageSubclassUniverseprivateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes可以對Java類中定義的屬性和方法進行訪問控制----規(guī)定不同的保護等級:應(yīng)用案例見p80-87例3-14-17。

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論