第三章類與對象_第1頁
第三章類與對象_第2頁
第三章類與對象_第3頁
第三章類與對象_第4頁
第三章類與對象_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、/ 類是對某一類事物的描述,是抽象的、概念上的定義;對象是實(shí)際存類是對某一類事物的描述,是抽象的、概念上的定義;對象是實(shí)際存在的該類事物的每個個體,因而也稱實(shí)例在的該類事物的每個個體,因而也稱實(shí)例(instance)。 如果將對象比作汽車,那么類就是汽車的設(shè)計(jì)圖紙。所以面向?qū)ο蟪绦蛟O(shè)計(jì)的重點(diǎn)是類的設(shè)計(jì),而不是對象的設(shè)計(jì)。 /class Personint age;void shout()System.out.println(“oh,my god! I am “ + age);nage是類的屬性是類的屬性 ,也叫類成員變量,也叫類成員變量 。nshout是方法也叫類的成員函數(shù)。是方法也叫類的成員

2、函數(shù)。nshout方法可以直接訪問同一個類中的方法可以直接訪問同一個類中的age變量變量 ,如果一個方法中有與成,如果一個方法中有與成員變量同名的局部變量,該方法中對這個變量名的訪問是局部變量,而不員變量同名的局部變量,該方法中對這個變量名的訪問是局部變量,而不再是成員變量。再是成員變量。 /對象可以認(rèn)為是在一類事物中抽象出某一個特例,通過這個特例來處理這類事物對象可以認(rèn)為是在一類事物中抽象出某一個特例,通過這個特例來處理這類事物出現(xiàn)的問題,在出現(xiàn)的問題,在Java語言中通過語言中通過new操作符來創(chuàng)建對象。準(zhǔn)確地說,可以在操作符來創(chuàng)建對象。準(zhǔn)確地說,可以在Java語言中使用語言中使用new操

3、作符調(diào)用構(gòu)造方法創(chuàng)建對象操作符調(diào)用構(gòu)造方法創(chuàng)建對象。當(dāng)用戶使用當(dāng)用戶使用new操作符創(chuàng)建一個對象后,可以使用操作符創(chuàng)建一個對象后,可以使用“對象對象.類成員類成員”來獲取對象的來獲取對象的屬性和行為。對象的屬性和行為在類中是通過類成員變量和成員方法的形式來表屬性和行為。對象的屬性和行為在類中是通過類成員變量和成員方法的形式來表示的,所以當(dāng)對象獲取類成員,也就相應(yīng)地獲取了對象的屬性和行為。示的,所以當(dāng)對象獲取類成員,也就相應(yīng)地獲取了對象的屬性和行為。/ 在在Java語言中盡管一切都可以看作對象,但真正操作標(biāo)識符實(shí)質(zhì)上是一個引用,語言中盡管一切都可以看作對象,但真正操作標(biāo)識符實(shí)質(zhì)上是一個引用,那么

4、引用究竟在那么引用究竟在Java中是如何體現(xiàn)的?來看下面的語法。中是如何體現(xiàn)的?來看下面的語法。語法如下:語法如下:類名類名 對象引用名稱對象引用名稱比如一個比如一個Book類的引用可以使用的代碼如下所示:類的引用可以使用的代碼如下所示:Book book;/在在Java語言中有兩種對象的比較方式,分別為語言中有兩種對象的比較方式,分別為“=”運(yùn)算符與運(yùn)算符與equals()方法。實(shí)方法。實(shí)質(zhì)上這兩種方式有著本質(zhì)區(qū)別,下面舉例說明。質(zhì)上這兩種方式有著本質(zhì)區(qū)別,下面舉例說明。.c1c3c2堆c1對象c2對象abcabcc1和c3引用指向同一內(nèi)存地址/每個對象都有生命周期,當(dāng)對象的生命周期結(jié)束時,

5、分配給該對象的內(nèi)存地址將每個對象都有生命周期,當(dāng)對象的生命周期結(jié)束時,分配給該對象的內(nèi)存地址將會被回收,在其他語言中需要手動回收廢棄的對象,但是會被回收,在其他語言中需要手動回收廢棄的對象,但是Java擁有一套完整的垃擁有一套完整的垃圾回收機(jī)制,用戶不必?fù)?dān)心廢棄的對象占用內(nèi)存,垃圾回收器將回收無用的占用圾回收機(jī)制,用戶不必?fù)?dān)心廢棄的對象占用內(nèi)存,垃圾回收器將回收無用的占用內(nèi)存的資源。內(nèi)存的資源。/Person p1 = new Person();執(zhí)行完后的內(nèi)存狀態(tài)執(zhí)行完后的內(nèi)存狀態(tài)/當(dāng)一個對象被創(chuàng)建時,會對其中各種類型的成員變量自動進(jìn)行初始化當(dāng)一個對象被創(chuàng)建時,會對其中各種類型的成員變量自動進(jìn)

6、行初始化賦值。除了基本數(shù)據(jù)類型之外的都是變量類型都是引用類型,如上賦值。除了基本數(shù)據(jù)類型之外的都是變量類型都是引用類型,如上面的面的Person及前面講過的數(shù)組。及前面講過的數(shù)組。 /創(chuàng)建新的對象之后創(chuàng)建新的對象之后,我們就可以使用我們就可以使用“ 對象名對象名.對象成員對象成員 ”的格式,來訪問對象的成員的格式,來訪問對象的成員(包括屬性和方法)(包括屬性和方法) class TestPersonpublic static void main(String args) Person p1 = new Person();Person p2 =new Person();p1.age = -30;

7、p1.shout();p2.shout();上面程序運(yùn)行的內(nèi)存布局如下圖上面程序運(yùn)行的內(nèi)存布局如下圖 /n我們也可以不定義對象的句柄,而直接調(diào)用這個對象的方法。我們也可以不定義對象的句柄,而直接調(diào)用這個對象的方法。這樣的對象叫做匿名對象,這樣的對象叫做匿名對象, 如:如:new Person().shout(); n如果對一個對象只需要進(jìn)行一次方法調(diào)用,那么就可以使用如果對一個對象只需要進(jìn)行一次方法調(diào)用,那么就可以使用匿名對象。匿名對象。 n我們經(jīng)常將匿名對象作為實(shí)參傳遞給一個函數(shù)調(diào)用。我們經(jīng)常將匿名對象作為實(shí)參傳遞給一個函數(shù)調(diào)用。 /n如果外面的程序可以隨意修改一個類的成員變量,會造如果外面

8、的程序可以隨意修改一個類的成員變量,會造成不可預(yù)料的程序錯誤,就象一個人的身高,不能被外成不可預(yù)料的程序錯誤,就象一個人的身高,不能被外部隨意修改,只能通過自己的方法去修改這個屬性。部隨意修改,只能通過自己的方法去修改這個屬性。 n在定義一個類的成員(包括變量和方法)時,使用在定義一個類的成員(包括變量和方法)時,使用private關(guān)鍵字說明這個成員的訪問權(quán)限,這個成員成了關(guān)鍵字說明這個成員的訪問權(quán)限,這個成員成了類的私有成員,只能被這個類的其他成員方法調(diào)用,而類的私有成員,只能被這個類的其他成員方法調(diào)用,而不能被其他的類中的方法所調(diào)用。不能被其他的類中的方法所調(diào)用。 /n為了實(shí)現(xiàn)良好的封裝性

9、,我們通常將類的成員變量聲明為為了實(shí)現(xiàn)良好的封裝性,我們通常將類的成員變量聲明為private,再通過再通過public的方法來對這個變量進(jìn)行訪問。對一個變量的操作,的方法來對這個變量進(jìn)行訪問。對一個變量的操作,一般都有讀取和賦值操作,我們分別定義兩個方法來實(shí)現(xiàn)這兩種操一般都有讀取和賦值操作,我們分別定義兩個方法來實(shí)現(xiàn)這兩種操作,一個是作,一個是getXxx()(Xxx表示要訪問的成員變量的名字),用表示要訪問的成員變量的名字),用來讀取這個成員變量操作,另外一個是來讀取這個成員變量操作,另外一個是setXxx()用來對這個成員用來對這個成員變量賦值。變量賦值。n一個類通常就是一個小的模塊,我

10、們應(yīng)該讓模塊僅僅公開必須要讓一個類通常就是一個小的模塊,我們應(yīng)該讓模塊僅僅公開必須要讓外界知道的內(nèi)容,而隱藏其它一切內(nèi)容。我們在進(jìn)行程序的詳細(xì)設(shè)外界知道的內(nèi)容,而隱藏其它一切內(nèi)容。我們在進(jìn)行程序的詳細(xì)設(shè)計(jì)時,應(yīng)盡量避免一個模塊直接修改或操作另一個模塊的數(shù)據(jù),模計(jì)時,應(yīng)盡量避免一個模塊直接修改或操作另一個模塊的數(shù)據(jù),模塊設(shè)計(jì)追求強(qiáng)內(nèi)聚(許多功能盡量在類的內(nèi)部獨(dú)立完成,不讓外面塊設(shè)計(jì)追求強(qiáng)內(nèi)聚(許多功能盡量在類的內(nèi)部獨(dú)立完成,不讓外面干預(yù)),弱耦合(提供給外部盡量少的方法調(diào)用)。用總統(tǒng)指揮一干預(yù)),弱耦合(提供給外部盡量少的方法調(diào)用)。用總統(tǒng)指揮一支軍隊(duì)的例子來說明這種效果。支軍隊(duì)的例子來說明這種

11、效果。 /n隱藏類的實(shí)現(xiàn)細(xì)節(jié);隱藏類的實(shí)現(xiàn)細(xì)節(jié);n讓使用者只能通過事先定制好的方法來訪問數(shù)據(jù),可讓使用者只能通過事先定制好的方法來訪問數(shù)據(jù),可以方便地加入控制邏輯,限制對屬性的不合理操作;以方便地加入控制邏輯,限制對屬性的不合理操作;n便于修改,增強(qiáng)代碼的可維護(hù)性;便于修改,增強(qiáng)代碼的可維護(hù)性;/n構(gòu)造方法的特征構(gòu)造方法的特征l它具有與類相同的名稱;它具有與類相同的名稱;l它不含返回值;它不含返回值;l它不能在方法中用它不能在方法中用return語句返回一個值語句返回一個值注意:在構(gòu)造方法里不含返回值的概念是不同于注意:在構(gòu)造方法里不含返回值的概念是不同于“void”的,在的,在定義構(gòu)造方法時

12、加了定義構(gòu)造方法時加了“void”,結(jié)果這個方法就不再被自動調(diào),結(jié)果這個方法就不再被自動調(diào)用了。用了。n構(gòu)造方法的作用:當(dāng)一個類的實(shí)例對象剛產(chǎn)生時,這個類的構(gòu)造構(gòu)造方法的作用:當(dāng)一個類的實(shí)例對象剛產(chǎn)生時,這個類的構(gòu)造方法就會被自動調(diào)用,我們可以在這個方法中加入要完成初始化方法就會被自動調(diào)用,我們可以在這個方法中加入要完成初始化工作的代碼。這就好像我們規(guī)定每個工作的代碼。這就好像我們規(guī)定每個“人人”一出生就必須先啼哭,一出生就必須先啼哭,我們就可以在我們就可以在“人人”的構(gòu)造方法中加入完成的構(gòu)造方法中加入完成“啼哭啼哭”的程序代碼,的程序代碼,于是每個于是每個“人人”一出生就會自動完成一出生就會

13、自動完成“啼哭啼哭”,程序就不必再在,程序就不必再在每個人剛出生時一個一個地告訴他們要每個人剛出生時一個一個地告訴他們要“啼哭啼哭”了。了。 /n和一般的方法重載一樣,重載的構(gòu)造方法具有不同個數(shù)或不同類型和一般的方法重載一樣,重載的構(gòu)造方法具有不同個數(shù)或不同類型的參數(shù),編譯器就可以根據(jù)這一點(diǎn)判斷出用的參數(shù),編譯器就可以根據(jù)這一點(diǎn)判斷出用new 關(guān)鍵字產(chǎn)生對象時,關(guān)鍵字產(chǎn)生對象時,該調(diào)用哪個構(gòu)造方法了。產(chǎn)生對象的格式是:該調(diào)用哪個構(gòu)造方法了。產(chǎn)生對象的格式是:new 類名類名(參數(shù)列參數(shù)列表表) ;n重載構(gòu)造方法可以完成不同初始化的操作,重載構(gòu)造方法可以完成不同初始化的操作, 如:如:p3=ne

14、w Person(“Tom”,18);語句,會做這樣幾件事:創(chuàng)建指定類的新實(shí)例語句,會做這樣幾件事:創(chuàng)建指定類的新實(shí)例對象,在堆內(nèi)存中為實(shí)例對象分配內(nèi)存空間,并調(diào)用指定類的構(gòu)造對象,在堆內(nèi)存中為實(shí)例對象分配內(nèi)存空間,并調(diào)用指定類的構(gòu)造方法,最后將實(shí)例對象的首地址賦值給引用變量方法,最后將實(shí)例對象的首地址賦值給引用變量p3。 /n在在java每個類里都至少有一個構(gòu)造方法,如果程序員沒有在一個每個類里都至少有一個構(gòu)造方法,如果程序員沒有在一個類里定義構(gòu)造方法,系統(tǒng)會自動為這個類產(chǎn)生一個默認(rèn)的構(gòu)造方類里定義構(gòu)造方法,系統(tǒng)會自動為這個類產(chǎn)生一個默認(rèn)的構(gòu)造方法,這個默認(rèn)構(gòu)造方法沒有參數(shù),在其方法體中也沒

15、有任何代碼,法,這個默認(rèn)構(gòu)造方法沒有參數(shù),在其方法體中也沒有任何代碼,即什么也不做。即什么也不做。 n由于系統(tǒng)提供的默認(rèn)構(gòu)造方法往往不能滿足編程者的需求,我們由于系統(tǒng)提供的默認(rèn)構(gòu)造方法往往不能滿足編程者的需求,我們可以自己定義類的構(gòu)造方法,來滿足我們的需要,一旦編程者為可以自己定義類的構(gòu)造方法,來滿足我們的需要,一旦編程者為該類定義了構(gòu)造方法,系統(tǒng)就不再提供默認(rèn)的構(gòu)造方法了。該類定義了構(gòu)造方法,系統(tǒng)就不再提供默認(rèn)的構(gòu)造方法了。 n聲明構(gòu)造方法,如無特殊需要,應(yīng)使用聲明構(gòu)造方法,如無特殊需要,應(yīng)使用public關(guān)鍵字,在我們前關(guān)鍵字,在我們前面例子中,可以使用面例子中,可以使用private訪問修飾符嗎?訪問修飾符嗎? /n類與對象之間的關(guān)系是總體和個體關(guān)系。類與對象之間的關(guān)系是總體和個體

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論