JAVA程序設(shè)計課件:第4章 類與面向?qū)ο缶幊蘝第1頁
JAVA程序設(shè)計課件:第4章 類與面向?qū)ο缶幊蘝第2頁
JAVA程序設(shè)計課件:第4章 類與面向?qū)ο缶幊蘝第3頁
JAVA程序設(shè)計課件:第4章 類與面向?qū)ο缶幊蘝第4頁
JAVA程序設(shè)計課件:第4章 類與面向?qū)ο缶幊蘝第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章類與面向?qū)ο缶幊?.1面向?qū)ο缶幊袒A(chǔ)4.2類的編程實現(xiàn)4.3對象的定義與使用4.4重載4.5訪問控制符4.6其它修飾符面向?qū)ο缶幊袒A(chǔ)類(Class)類是描述對象的“基本原型”,它定義一類對象所能擁有的數(shù)據(jù)和能完成的操作。在面向?qū)ο蟮某绦蛟O(shè)計中,類是程序的基本單元相似的對象可以歸并到同一個類中去,就像傳統(tǒng)語言中的變量與類型關(guān)系一樣。程序中的對象是類的一個實例,是一個軟件單元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。面向?qū)ο缶幊袒A(chǔ)……Carcar1;Carcar2;……CarcarN;面向?qū)ο缶幊袒A(chǔ)對象的主要屬性是狀態(tài)和行為。對象的狀態(tài)為靜態(tài)屬性,即變量。它表示對象所處的狀態(tài)。對象的操作可以改變對象的狀態(tài)。對象的行為為動態(tài)屬性,也成為操作。操作的作用是設(shè)置或者改變對象的狀態(tài)。ClassDemo.javaClassClassDemo{

inta;

intb;

ClassDemo(){a=2;b=3;}voidshow(){

System.out.println(“a=”+a+”,b=”+b);}publicstaticvoidmain(Stringargs[])………..}狀態(tài)行為面向?qū)ο缶幊袒A(chǔ)面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點:較高的可維護性。面向?qū)ο缶幊讨校绦蛴啥鄠€類組成,類中包含屬性和方法的定義,類與類之間通過方法調(diào)用實現(xiàn)交互,而不是共享數(shù)據(jù),這徹底消除了面向過程編程中數(shù)據(jù)與操作分離帶來的問題,提高了程序的可維護性??芍赜眯愿撸ㄟ^設(shè)計一個個實現(xiàn)特定功能的對象,可提高程序的可重復(fù)性。繼承是面向?qū)ο蟮囊粋€重要特性,通過繼承可以實現(xiàn)子類對父類的擴展和父類代碼的重復(fù)使用,提高了程序開發(fā)效率,降低了開發(fā)成本。保護數(shù)據(jù)。通過將數(shù)據(jù)封裝在對象中,對外只提供訪問數(shù)據(jù)的方法,保護了數(shù)據(jù)不能被隨便修改,減少了模塊間的干擾。對象的抽象一、對象的抽象用面向?qū)ο蠓椒ń鉀Q現(xiàn)實世界的問題時,去掉物體中與問題不相關(guān)的部分,并形成我們需要的類的過程成為抽象。

封裝封裝是利用將數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一個抽象數(shù)據(jù)類型中,數(shù)據(jù)被保護在抽象數(shù)據(jù)類型的內(nèi)部,系統(tǒng)的其它部分只能通過接口才能與數(shù)據(jù)進行交互。

類定義Java中,類定義的基本語法如下:[Specifier]class

ClassName[extends

SuperClassName][implements

InterfaceName]{

//類的成員變量定義//類的方法定義…}

類定義下面的代碼定義了一個最簡單的類Person://Person.java//thisprogramisaboutthedefinitionofthepersonclassPerson{}域的定義

域定義的方式如下:[Specifier]typevariableName;intx=3,y;//定義了整型變量x和yDatetoday;

//定義了Date型類變量todayChar[]m;//定義了字符型數(shù)組變量x和y

域定義的一個例子下面定義了一個包含域的定義的類Person://Person.java//thisprogramisaboutthedefinitionofthepersonclassPerson{//域定義

Stringname;//姓名

intsex;//性別

privatedoublesalary;//薪水

intage;//年齡}方法的定義

方法由方法頭和方法體構(gòu)成,方法定義的語法如下:[Specifier]returnType

methodName([parameterList]){//方法體}classPerson{//域定義

Stringname;//姓名

intsex;//性別

privatedoublesalary;//薪水

intage;//年齡

//方法定義StringgetName(){returnname;}voidsetName(Strings){name=s;}doublegetIncome(){returnsalary;}voidsetIncome(doubled){salary=d;}}

1.

方法的返回值

在進行方法定義時,Java要求必須說明返回值的類型。如果方法沒有返回值,那么需要在方法名前添加關(guān)鍵字void

int

mx(){i++;j=i++;

System.out.println("i="+i);

System.out.println("j="+j);

return(j*i);}無返回值的方法voidmp(){ i=j=6;

System.out.println("i="+i);

System.out.println("j="+j);}2.方法的參數(shù)

Java的方法也可以帶參數(shù),以便從外部向方法提供信息。編寫方法時,需要確定參數(shù)的數(shù)量和類型,在方法定義中說明方法的所有參數(shù)名和參數(shù)的類型doublecomputeArea(doublex,doubley){doubles;s=x*y;returns;}

參數(shù)名可以與類的域名相同,如果相同,那么參數(shù)名將在方法體內(nèi)隱藏同名的成員變量。publicclassRectangle{doublex;doubley;doublecomputeArea(doublex,doubley){doubles;s=x*y;returns;}}3.方法體中的變量

在方法體中定義的變量稱為局部變量,它只能被定義它的方法內(nèi)部訪問。而成員變量可以被類中的所有方法訪問。

與成員變量不同,局部變量使用前,必須進行初始化。

局部變量的名字可以與成員變量相同

1publicclassEqualVarible{

inti=2;voidmv(){

inti=6;

System.out.println("i="+i);//System.out.println("this.i="+this.i);}publicstaticvoidmain(Stringargs[]){

EqualVariblel=newLocalVarible();

l.mv();}}4.3對象的定義與使用

1.對象的聲明

對象聲明的語法如下:className

objectName;其中,className是類名,用來說明對象所屬的類。objectName是對象名,對象名的第一個字符一般為小寫字母。下面定義一個Person類的對象myPerson:

PersonmyPerson;

2.對象的實例化

對象實例化的語法為:objectName=newclassName([ParameterValue]);關(guān)鍵字new的作用是為對象向系統(tǒng)申請內(nèi)存,并且同時調(diào)用className類的構(gòu)造方法對對象進行初始化。

下面是對象實例化的例子:

myPerson=newPerson();構(gòu)造方法

構(gòu)造方法是類的一種特殊方法,主要作用是在創(chuàng)建類對象時,初始化類的實例對象。特點:

構(gòu)造方法的方法名必須與類名相同。構(gòu)造方法沒有返回值,也不需要返回類型修飾符。用戶不能直接調(diào)用構(gòu)造方法。構(gòu)造方法在用戶創(chuàng)建對象時,由系統(tǒng)自動調(diào)用執(zhí)行。構(gòu)造方法的作用是對類對象進行初始化。構(gòu)造方法的定義可以為前面定義的Person類添加如下構(gòu)造方法:Person(Stringn,ints,doublei,inta){ name=n; sex=s; salary=i; age=a;}缺省構(gòu)造類中可以不用定義構(gòu)造方法,如果沒有構(gòu)造方法,系統(tǒng)將為該類缺省定義一個空構(gòu)造方法,也稱為缺省構(gòu)造方法。用缺省構(gòu)造方法初始化對象時,系統(tǒng)用缺省值初始化類對象的數(shù)據(jù)成員。

各數(shù)據(jù)類型的缺省值如下:數(shù)值型:0布爾型:false字符型:’\0’

類:null對象的使用可以用點(.)操作符來調(diào)用對象實例的成員變量和方法

1.域的引用

成員變量引用的形式如下:

objectreference.variablename

例如可以通過賦值語句修改firstP的值。

firstP=“Henry”;

對象的使用2.方法的調(diào)用對象的方法調(diào)用的一般形式如下:objectreference.methodname(parameter-list)例如:PersonfirstPerson=newPerson();firstPerson.setName(“Larry”);3.方法的賦值調(diào)用和引用

方法與外界進行信息交換的方式有三種:1.通過方法的返回值2.利用類的成員變量3.通過方法中的參數(shù)傳遞

利用參數(shù)傳遞的方法實現(xiàn)信息交換。參數(shù)可以為任何的數(shù)據(jù)類型,如基本數(shù)據(jù)類型、數(shù)組、類。根據(jù)參數(shù)類型的不同,參數(shù)交換的實現(xiàn)分為賦值調(diào)用方式和引用方式。

賦值調(diào)用

賦值調(diào)用中,參數(shù)是基本數(shù)據(jù)類型的變量,如:整型、實型、字符型等等。賦值調(diào)用中,實參的值不受形參的影響。

⑵引用

引用中,參數(shù)的類型為復(fù)合數(shù)據(jù)類型,如:數(shù)組,類。這時,實際參數(shù)的值與形式參數(shù)實際上是同一個值,即當(dāng)形參變化時,實參的值也隨之變化。4.4重載

重載是在同一個類中,可以定義相同名字的多個方法。但是它們的參數(shù)表決不相同,即方法擁有的參數(shù)的數(shù)量、類型和參數(shù)順序不同。這樣,在進行方法調(diào)用時,通過參數(shù)表來匹配相應(yīng)的方法,實現(xiàn)需要的功能。

GraphicArea.java

構(gòu)造方法的重載

一個類中的構(gòu)造方法可以實現(xiàn)重載,即可以定義多個相同方法名,但參數(shù)表不同的構(gòu)造方法,分別對對象實現(xiàn)不同程度的初始化。重載構(gòu)造方法的主要目的是使對象具有不同的初始值,為類對象的初始化提供方便。

this的使用Person.java4.5訪問控制符

訪問控制符用在類、域和方法定義中,用來規(guī)定類、域和方法是否可以被外界訪問和調(diào)用的修飾符。訪問控制符規(guī)定的權(quán)限共有四個:public、private、protected和缺省的修飾符(即沒有定義訪問控制符)。

publicpublic的英文意思是“公有的、公共的”,它不僅可以修飾類,還可以修飾變量和方法。注意程序中有多個類的時候,最多只能有一個類被public修飾,程序名必須命名為public修飾的類名

Functransfer1.java當(dāng)用public修飾成員變量和方法時,變量和方法可以被任何程序直接訪問和修改。但這不利于保證數(shù)據(jù)的一致性,造成安全性和可靠性的下降。

private修飾符

在域和方法前面添加private修飾符,說明域和方法是私有的,只能被定義它們的類訪問和調(diào)用。其它任何類都不能獲取私有域和私有方法。

Person.java

protected修飾符

關(guān)鍵字protected修飾的域和方法只能被以下三種類訪問和調(diào)用:域和方法所在的類。同一個包內(nèi)的其它類。其它包(package)中該類的子類。

缺省的修飾符

如果一個類、域和方法前面沒有被訪問控制符修飾,說明它具有缺省的訪問控制特性:域和方法所在的類。同一個包內(nèi)的其它類。4.6其它修飾符

this修飾符

static修飾符

final修飾符

this修飾符this用來在一個成員函數(shù)內(nèi)部指向當(dāng)前的對象,即this代表了當(dāng)前對象的一個引用。通過對象引用可以地訪問與修改對象的域、方法。this的使用:局部變量、成員函數(shù)的參數(shù)和實例變量的名字相同時,用this+成員變量可以進行區(qū)分。調(diào)用重載的構(gòu)造方法。this(參數(shù)表);類中方法和成員變量前面都可以添加this。this不能用在靜態(tài)方法中。static修飾符關(guān)鍵字static的英文意思是“靜態(tài)的”。它可以修飾變量、方法和復(fù)合語句。

static修飾的域(成員變量)稱為類的靜態(tài)域。靜態(tài)域存儲在類的內(nèi)存區(qū)域單元中,是屬于整個類的成員變量;由關(guān)鍵字static修飾的方法稱為靜態(tài)方法。static方法是屬于整個類的方法,對整個類而言是共享的。靜態(tài)初始化就是由static修飾的復(fù)合語句,用來完成靜態(tài)變量的初始化工作。

靜態(tài)域的應(yīng)用classTestStaticFunc{staticintx=6;//非靜態(tài)變量

publicint

getx(){returnx;}publicstaticvoidmain(String[]a){

System.out.println(TestStaticFunc.x);

System.out.println(TestStaticFunc.getx());}}靜態(tài)方法靜態(tài)方法具有以下特點:靜態(tài)方法是屬于整個類的,在內(nèi)存中分配公共的內(nèi)存空間。而非static方法是屬于某個對象的方法,只有在對象創(chuàng)建時,才為該對象的方法分配內(nèi)存空間靜態(tài)方法又稱為類方法,它直接不能操縱和處理類的非靜態(tài)的成員變量,只能處理屬于整個類的成員變量,也就是靜態(tài)域。調(diào)用靜態(tài)方法時,可以不用創(chuàng)建對象,而直接使用類名作為前綴。TestStaticFunc.javaclassTestStaticFunc{

intx;//非靜態(tài)變量

staticint

getx(){returnx;}staticvoidsetx(intt){x=t;}}靜態(tài)初始化TheStatic.

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論