JAVA語言與編程第4章 類與對(duì)象ppt課件_第1頁
JAVA語言與編程第4章 類與對(duì)象ppt課件_第2頁
JAVA語言與編程第4章 類與對(duì)象ppt課件_第3頁
JAVA語言與編程第4章 類與對(duì)象ppt課件_第4頁
JAVA語言與編程第4章 類與對(duì)象ppt課件_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第4章章 類與對(duì)象類與對(duì)象4.1 基本概念基本概念4.1.1 面向?qū)ο缶幊毯?jiǎn)介面向?qū)ο缶幊毯?jiǎn)介 面向?qū)ο缶幊袒蛎嫦驅(qū)ο笤O(shè)計(jì)均可稱為面向?qū)ο缶幊袒蛎嫦驅(qū)ο笤O(shè)計(jì)均可稱為OOP,它是目前,它是目前占占主流地位的一種程序設(shè)計(jì)方式,取代了先前的所謂結(jié)構(gòu)化、主流地位的一種程序設(shè)計(jì)方式,取代了先前的所謂結(jié)構(gòu)化、面向過程的編程技術(shù)。面向過程的編程技術(shù)。 傳統(tǒng)的結(jié)構(gòu)化編程是設(shè)計(jì)一組函數(shù)來解決一個(gè)問題,即先傳統(tǒng)的結(jié)構(gòu)化編程是設(shè)計(jì)一組函數(shù)來解決一個(gè)問題,即先解決算法,再解決使計(jì)算更容易的數(shù)據(jù)結(jié)構(gòu);解決算法,再解決使計(jì)算更容易的數(shù)據(jù)結(jié)構(gòu);OOP方法則相方法則相反,即先解決數(shù)據(jù)結(jié)構(gòu),再解決數(shù)據(jù)結(jié)構(gòu)運(yùn)算的算法,數(shù)據(jù)反,

2、即先解決數(shù)據(jù)結(jié)構(gòu),再解決數(shù)據(jù)結(jié)構(gòu)運(yùn)算的算法,數(shù)據(jù)結(jié)構(gòu)和算法均封裝在對(duì)象中。結(jié)構(gòu)和算法均封裝在對(duì)象中。 4.1.2 類與對(duì)象類與對(duì)象 在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象是程序的基本單位,相似的對(duì)象之間的在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象是程序的基本單位,相似的對(duì)象之間的關(guān)系就像是相同類型的不同變量。這些相似的對(duì)象可以通過一個(gè)類將它關(guān)系就像是相同類型的不同變量。這些相似的對(duì)象可以通過一個(gè)類將它們抽象出來,在類中定義它們共同的屬性和方法。們抽象出來,在類中定義它們共同的屬性和方法。 類實(shí)質(zhì)上定義了一種對(duì)象類型,它是具有相似行為的對(duì)象的一種抽象類實(shí)質(zhì)上定義了一種對(duì)象類型,它是具有相似行為的對(duì)象的一種抽象,描述了屬于該

3、類型的所有對(duì)象的性質(zhì)描述了屬于該類型的所有對(duì)象的性質(zhì)統(tǒng)一的屬性和統(tǒng)一的操作模式。統(tǒng)一的屬性和統(tǒng)一的操作模式。 對(duì)象是在程序執(zhí)行過程中由其所屬的類動(dòng)態(tài)生成的,一個(gè)類可以生成對(duì)象是在程序執(zhí)行過程中由其所屬的類動(dòng)態(tài)生成的,一個(gè)類可以生成多個(gè)不同對(duì)象,對(duì)象也被稱作類的實(shí)例。同一個(gè)類的所有對(duì)象有相同的多個(gè)不同對(duì)象,對(duì)象也被稱作類的實(shí)例。同一個(gè)類的所有對(duì)象有相同的性質(zhì)。但一個(gè)對(duì)象的內(nèi)部狀態(tài)只能由其自身修改,任何別的對(duì)象都不能性質(zhì)。但一個(gè)對(duì)象的內(nèi)部狀態(tài)只能由其自身修改,任何別的對(duì)象都不能修改它。因此,同一個(gè)類的對(duì)象雖然在外部表現(xiàn)形式上相同,但可以有修改它。因此,同一個(gè)類的對(duì)象雖然在外部表現(xiàn)形式上相同,但可以

4、有不同的內(nèi)部狀態(tài),即不同的屬性值。不同的內(nèi)部狀態(tài),即不同的屬性值。4.1.3 消息和方法消息和方法 對(duì)象之間進(jìn)行交互時(shí),通過消息來實(shí)現(xiàn)。對(duì)象之間進(jìn)行交互時(shí),通過消息來實(shí)現(xiàn)。 構(gòu)成消息的三個(gè)要素:構(gòu)成消息的三個(gè)要素: (1) 接收消息的對(duì)象接收消息的對(duì)象 (2) 接收消息的方法接收消息的方法 (3) 方法所需要的參數(shù)方法所需要的參數(shù)4.1.4 面向?qū)ο缶幊痰幕咎卣髅嫦驅(qū)ο缶幊痰幕咎卣?.封裝性:封裝性: “封裝是一種組織開發(fā)軟件的方法,其基本思想是把客觀世界中聯(lián)封裝是一種組織開發(fā)軟件的方法,其基本思想是把客觀世界中聯(lián)系系緊密的元素和相關(guān)操作組織在一起,使其相互關(guān)系隱藏在程序體內(nèi)部,緊密的元素

5、和相關(guān)操作組織在一起,使其相互關(guān)系隱藏在程序體內(nèi)部,而對(duì)外僅僅表現(xiàn)為與其他封裝體之間的接口。而對(duì)外僅僅表現(xiàn)為與其他封裝體之間的接口。 在面向?qū)ο蟮某绦蜷_發(fā)中,每個(gè)類都封裝了相關(guān)的數(shù)據(jù)和操作。另外在面向?qū)ο蟮某绦蜷_發(fā)中,每個(gè)類都封裝了相關(guān)的數(shù)據(jù)和操作。另外,在在Java中,包的概念也體現(xiàn)了封裝性,包將一組相關(guān)的類封裝在一起。中,包的概念也體現(xiàn)了封裝性,包將一組相關(guān)的類封裝在一起。 類的封裝性使得代碼的可重用性大為提高。使用者不用知道實(shí)現(xiàn)的細(xì)類的封裝性使得代碼的可重用性大為提高。使用者不用知道實(shí)現(xiàn)的細(xì)節(jié),只需要用設(shè)計(jì)者提供的消息來訪問該對(duì)象公共的方法)。節(jié),只需要用設(shè)計(jì)者提供的消息來訪問該對(duì)象公共

6、的方法)。2.繼承性:繼承性: Java中的類組成一個(gè)層次結(jié)構(gòu):一個(gè)類之上的類稱為父類,下層的類中的類組成一個(gè)層次結(jié)構(gòu):一個(gè)類之上的類稱為父類,下層的類稱為子類。這種層次結(jié)構(gòu)的一個(gè)重要性質(zhì)就是繼承性。父類可以產(chǎn)生子稱為子類。這種層次結(jié)構(gòu)的一個(gè)重要性質(zhì)就是繼承性。父類可以產(chǎn)生子類,子類可以繼承父類中的屬性和方法,且這種繼承具有傳遞性。一個(gè)類,子類可以繼承父類中的屬性和方法,且這種繼承具有傳遞性。一個(gè)類可以繼承其上層的全部父類中的屬性和方法。這樣某個(gè)類的對(duì)象除了類可以繼承其上層的全部父類中的屬性和方法。這樣某個(gè)類的對(duì)象除了具有這個(gè)類所描述的性質(zhì)外,還具有類等級(jí)中該類的上層的全部父類所具有這個(gè)類所描

7、述的性質(zhì)外,還具有類等級(jí)中該類的上層的全部父類所描述的一切性質(zhì)。描述的一切性質(zhì)。 在面向?qū)ο蟮睦^承特性中,還有一個(gè)單重繼承和多重繼承的概念。單在面向?qū)ο蟮睦^承特性中,還有一個(gè)單重繼承和多重繼承的概念。單重繼承是指一個(gè)類只有一個(gè)單一的父類。多重繼承是指一個(gè)類可以有一重繼承是指一個(gè)類只有一個(gè)單一的父類。多重繼承是指一個(gè)類可以有一個(gè)以上的父類。個(gè)以上的父類。Java不支持多重繼承,但可以通過一個(gè)類實(shí)現(xiàn)多個(gè)接口不支持多重繼承,但可以通過一個(gè)類實(shí)現(xiàn)多個(gè)接口的方法來完成多重繼承的功能。的方法來完成多重繼承的功能。 類的繼承的好處:利用了代碼的可重用性,減少了程序中的冗余信息類的繼承的好處:利用了代碼的可重

8、用性,減少了程序中的冗余信息3.多態(tài)性:多態(tài)性: 多態(tài)是指通過方法重寫,一個(gè)類可以具有多個(gè)相同名字的多態(tài)是指通過方法重寫,一個(gè)類可以具有多個(gè)相同名字的方法,由參數(shù)個(gè)數(shù)和類型對(duì)它們加以區(qū)分。通過方法重寫,方法,由參數(shù)個(gè)數(shù)和類型對(duì)它們加以區(qū)分。通過方法重寫,子類可以重寫父類的某些方法,使其具有自己的特征。重寫子類可以重寫父類的某些方法,使其具有自己的特征。重寫可以隱藏父類的方法,使子類具有了自己的具體實(shí)現(xiàn)??梢噪[藏父類的方法,使子類具有了自己的具體實(shí)現(xiàn)。 父類和子類可以有相同名字的屬性和方法,在程序的執(zhí)行父類和子類可以有相同名字的屬性和方法,在程序的執(zhí)行期間,對(duì)對(duì)象某一屬性的查找是從該對(duì)象類所在層

9、次開始,期間,對(duì)對(duì)象某一屬性的查找是從該對(duì)象類所在層次開始,沿著類等級(jí)逐漸向上進(jìn)行的,把第一個(gè)找到的屬性作為所要沿著類等級(jí)逐漸向上進(jìn)行的,把第一個(gè)找到的屬性作為所要的屬性。因此,底層可以屏蔽高層的屬性。的屬性。因此,底層可以屏蔽高層的屬性。4.2 類類 類是Java中最基本的復(fù)合數(shù)據(jù)類型,是組成Java程序的基本要素。創(chuàng)建一個(gè)新類就是創(chuàng)建一個(gè)新的數(shù)據(jù)類型,實(shí)例化一個(gè)類就得到一個(gè)對(duì)象. 類有兩種基本成分:屬性和方法,又稱成員變量和成員方法。 類的成員變量可以是基本數(shù)據(jù)類型或數(shù)組,也可以是復(fù)合數(shù)據(jù)類型。 類的方法用于處理該類的數(shù)據(jù),類中的方法與其他語言中函數(shù)的區(qū)別:Java中的方法只能是類的成員,

10、只能在類中定義。4.2.1 類的定義類的定義格式:格式:修飾符修飾符 class 類名類名 extends 父類名父類名 implements 接口名接口名 類屬性聲明;類屬性聲明; 類方法聲明;類方法聲明; 闡明闡明:(1)class表示類定義開始,類名第一個(gè)字母通常大寫表示類定義開始,類名第一個(gè)字母通常大寫 (2)修飾符用來說明類的特殊性質(zhì),分為訪問控制符和類型說明符,修飾符用來說明類的特殊性質(zhì),分為訪問控制符和類型說明符, 訪問控制符用來說明類能被哪些對(duì)象引用訪問控制符用來說明類能被哪些對(duì)象引用(public),類型說明符有類型說明符有 abstract和和final,表示抽象類和最終類

11、,表示抽象類和最終類 (3)關(guān)鍵字關(guān)鍵字extends表示繼承,后面跟一個(gè)父類名表示繼承,后面跟一個(gè)父類名 (4)關(guān)鍵字關(guān)鍵字implements表示該類實(shí)現(xiàn)了接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)表示該類實(shí)現(xiàn)了接口,一個(gè)類可以實(shí)現(xiàn)多個(gè) 接口,接口使得類可以實(shí)現(xiàn)多重繼承接口,接口使得類可以實(shí)現(xiàn)多重繼承屬性的說明:屬性的說明:修飾符修飾符 變量的數(shù)據(jù)類型變量的數(shù)據(jù)類型 變量名變量名初始值初始值;修飾符修飾符 類名類名 對(duì)象名對(duì)象名new 類名類名(參數(shù)列表參數(shù)列表);類的屬性修飾符有訪問控制符,類的屬性修飾符有訪問控制符,static,final,volatile,transient方法的說明:方法的說明:修

12、飾符修飾符 返回值類型返回值類型 方法名方法名(形參說明形參說明)throws 異常異常1,異常,異常2, 局部變量說明;局部變量說明; 執(zhí)行語句組;執(zhí)行語句組; 類的方法修飾符包括:訪問控制符,類的方法修飾符包括:訪問控制符,static,final,synchronous,native返回值可以是簡(jiǎn)單變量也可以是復(fù)合對(duì)象,若無返回值,則用返回值可以是簡(jiǎn)單變量也可以是復(fù)合對(duì)象,若無返回值,則用void方法的名字最好體現(xiàn)方法的功能方法的名字最好體現(xiàn)方法的功能,常采用動(dòng)詞加賓語的形式常采用動(dòng)詞加賓語的形式,首字母小寫首字母小寫形參表示要傳遞到方法體內(nèi)的變量,形參可以有多個(gè),也可為空;形參形參表示

13、要傳遞到方法體內(nèi)的變量,形參可以有多個(gè),也可為空;形參可以是簡(jiǎn)單的數(shù)據(jù)類型,也可以是復(fù)雜數(shù)據(jù)類型;對(duì)于復(fù)雜數(shù)據(jù)類型的可以是簡(jiǎn)單的數(shù)據(jù)類型,也可以是復(fù)雜數(shù)據(jù)類型;對(duì)于復(fù)雜數(shù)據(jù)類型的參數(shù)對(duì)象,傳遞的是對(duì)象在內(nèi)存中的地址。參數(shù)對(duì)象,傳遞的是對(duì)象在內(nèi)存中的地址。4.2.2 修飾符修飾符1.訪問控制符訪問控制符包的概念:包由一組類組成,它如同文件夾一樣將各種類組織在一起包的概念:包由一組類組成,它如同文件夾一樣將各種類組織在一起.包包中的類沒有嚴(yán)格的某種關(guān)系,只是為了方便管理而將它們放在一個(gè)包中中的類沒有嚴(yán)格的某種關(guān)系,只是為了方便管理而將它們放在一個(gè)包中 訪問控制符規(guī)定了類、屬性和方法可以被程序的哪些

14、部分訪問和調(diào)用訪問控制符規(guī)定了類、屬性和方法可以被程序的哪些部分訪問和調(diào)用(1)類訪問控制符:類訪問控制符:public和默認(rèn)形式和默認(rèn)形式 public:公共類,表示它能被其他的任何類訪問。一個(gè)包中的類相互:公共類,表示它能被其他的任何類訪問。一個(gè)包中的類相互 可見,可以互相訪問,但不在同一個(gè)包中的類相互間是不可可見,可以互相訪問,但不在同一個(gè)包中的類相互間是不可見見 的。若要訪問,則需要用的。若要訪問,則需要用import將該類引入將該類引入,但引入的必須是但引入的必須是 public類。另外,含有類。另外,含有main( )方法的類必須是公共類方法的類必須是公共類 默許:表示該類只能被同

15、一個(gè)包中的類訪問,而不可以被其他包中的默許:表示該類只能被同一個(gè)包中的類訪問,而不可以被其他包中的 類訪問。即使用類訪問。即使用import引入,也不可以。引入,也不可以。(2)屬性方法訪問控制符屬性方法訪問控制符: public,private,protected,private protected,默許默許 public:修飾的屬性和方法是公共的屬性和方法,若類也是修飾的屬性和方法是公共的屬性和方法,若類也是public,則則這這 些屬性和方法可以被所有的類訪問。由于面向?qū)ο笤O(shè)計(jì)中的封些屬性和方法可以被所有的類訪問。由于面向?qū)ο笤O(shè)計(jì)中的封 裝性的要求裝性的要求,公共的屬性應(yīng)盡量減少公共的屬

16、性應(yīng)盡量減少,可通過公共的方法間接訪問可通過公共的方法間接訪問private:私有訪問控制符,經(jīng)它修飾的屬性和方法只能被類自身的方法私有訪問控制符,經(jīng)它修飾的屬性和方法只能被類自身的方法訪訪 問和使用問和使用,它對(duì)屬性和方法進(jìn)行了最高級(jí)別的保護(hù)它對(duì)屬性和方法進(jìn)行了最高級(jí)別的保護(hù).多數(shù)用來修飾多數(shù)用來修飾 屬性屬性,其他類需通過該類中的公共方法來訪問這些屬性其他類需通過該類中的公共方法來訪問這些屬性.這些公共這些公共 的方法為這些屬性提供了一個(gè)統(tǒng)一的接口的方法為這些屬性提供了一個(gè)統(tǒng)一的接口,體現(xiàn)了面向?qū)ο笏枷搿sw現(xiàn)了面向?qū)ο笏枷?。protected:保護(hù)訪問控制符保護(hù)訪問控制符,它修飾的屬性和方

17、法比它修飾的屬性和方法比private修飾的有較大修飾的有較大 的可見域的可見域,可以被同一個(gè)包中的其他類可以被同一個(gè)包中的其他類,不同包中的子類以及該類不同包中的子類以及該類 自身訪問和引用自身訪問和引用,主要是為了讓子類能夠方便地訪問父類主要是為了讓子類能夠方便地訪問父類private protected:私有保護(hù)訪問控制符私有保護(hù)訪問控制符,只能被該類自身和子類訪問和只能被該類自身和子類訪問和援用援用.既保證了子類對(duì)父類訪問的方便性,又提高了使用的安全性。既保證了子類對(duì)父類訪問的方便性,又提高了使用的安全性。默許:默許: 只能被同一個(gè)包中的其他類訪問和引用只能被同一個(gè)包中的其他類訪問和引

18、用修飾符修飾符類自身類自身子類子類包包不同包非子類不同包非子類publicprivateprotectedprivate protecteddefault2.關(guān)鍵字關(guān)鍵字static 前面提到的很多關(guān)于一個(gè)類訪問其他類的屬性和方法前面提到的很多關(guān)于一個(gè)類訪問其他類的屬性和方法,都是指創(chuàng)建了這都是指創(chuàng)建了這個(gè)類的對(duì)象后個(gè)類的對(duì)象后,以對(duì)象的形式對(duì)類的屬性和方法進(jìn)行訪問,但是在很多情以對(duì)象的形式對(duì)類的屬性和方法進(jìn)行訪問,但是在很多情況下需要直接調(diào)用類的屬性和方法。況下需要直接調(diào)用類的屬性和方法。 static所修飾的屬性和方法為靜態(tài)的屬性和方法。通常,所修飾的屬性和方法為靜態(tài)的屬性和方法。通常,s

19、tatic所修飾所修飾的屬性的取值,對(duì)所有對(duì)象都是相同的,任何一個(gè)對(duì)象對(duì)其修改,必然的屬性的取值,對(duì)所有對(duì)象都是相同的,任何一個(gè)對(duì)象對(duì)其修改,必然會(huì)影響到同一類中其他對(duì)象,而對(duì)于會(huì)影響到同一類中其他對(duì)象,而對(duì)于static所修飾的方法,在沒有創(chuàng)建所修飾的方法,在沒有創(chuàng)建類類的對(duì)象的情況下就可以對(duì)其進(jìn)行訪問。的對(duì)象的情況下就可以對(duì)其進(jìn)行訪問。 static修飾的屬性和方法在類被加載內(nèi)存時(shí)就開辟了內(nèi)存空間修飾的屬性和方法在類被加載內(nèi)存時(shí)就開辟了內(nèi)存空間,而并不而并不是在創(chuàng)建一個(gè)對(duì)象時(shí)創(chuàng)建的。因此這些屬性和方法必然要成為類中所有是在創(chuàng)建一個(gè)對(duì)象時(shí)創(chuàng)建的。因此這些屬性和方法必然要成為類中所有對(duì)象共有的

20、屬性和方法。對(duì)象共有的屬性和方法。 靜態(tài)屬性和方法可以用類名直接調(diào)用靜態(tài)屬性和方法可以用類名直接調(diào)用,如如java.lang包中的類包中的類System中中的屬性和方法都是靜態(tài)的。的屬性和方法都是靜態(tài)的。 System.out.println( ),out是是System類中一個(gè)屬性,它含有一個(gè)方法類中一個(gè)屬性,它含有一個(gè)方法println( )3.其他修飾符其他修飾符(1)abstract:抽象修飾符:抽象修飾符,在類的繼承中使用在類的繼承中使用,它修飾的類不能被實(shí)例化它修飾的類不能被實(shí)例化(2)final:最終修飾類,它修飾的類不能被繼承,方法不能再進(jìn)行重載:最終修飾類,它修飾的類不能被繼

21、承,方法不能再進(jìn)行重載(3)volatile synchronized:異步控制修飾符:異步控制修飾符 volatile修飾屬性,多個(gè)并發(fā)線程共享的變量,使各線程對(duì)該變量的修飾屬性,多個(gè)并發(fā)線程共享的變量,使各線程對(duì)該變量的訪訪 問保持一致。問保持一致。 synchronized用于聲明在任何時(shí)候都只能有一個(gè)線程可以執(zhí)行的一段用于聲明在任何時(shí)候都只能有一個(gè)線程可以執(zhí)行的一段 代碼或一個(gè)方法。代碼或一個(gè)方法。(4)native:修飾方法,表示該方法不是用:修飾方法,表示該方法不是用java編寫的編寫的4.2.3 構(gòu)造函數(shù)構(gòu)造函數(shù) 構(gòu)造函數(shù)是類的一種特殊方法,構(gòu)造函數(shù)是類的一種特殊方法,java中

22、每個(gè)類都有構(gòu)造函數(shù),它的功中每個(gè)類都有構(gòu)造函數(shù),它的功能是為類的對(duì)象定義初始化狀態(tài),若在類中沒有提供構(gòu)造函數(shù),則使用能是為類的對(duì)象定義初始化狀態(tài),若在類中沒有提供構(gòu)造函數(shù),則使用默認(rèn)的構(gòu)造函數(shù),默認(rèn)的構(gòu)造函數(shù)沒有參數(shù),屬于父類。若父類中沒有默認(rèn)的構(gòu)造函數(shù),默認(rèn)的構(gòu)造函數(shù)沒有參數(shù),屬于父類。若父類中沒有提供構(gòu)造函數(shù),則會(huì)產(chǎn)生編譯錯(cuò)誤。(例:提供構(gòu)造函數(shù),則會(huì)產(chǎn)生編譯錯(cuò)誤。(例:A406.java) 構(gòu)造函數(shù)的名稱必須與類名相同,且不能有返回值,創(chuàng)建對(duì)象時(shí)就要構(gòu)造函數(shù)的名稱必須與類名相同,且不能有返回值,創(chuàng)建對(duì)象時(shí)就要用構(gòu)造函數(shù),用用構(gòu)造函數(shù),用new來調(diào)用它來調(diào)用它 同一個(gè)類中可以有多個(gè)構(gòu)造函數(shù)

23、,名稱相同,而參數(shù)不同,它們以參同一個(gè)類中可以有多個(gè)構(gòu)造函數(shù),名稱相同,而參數(shù)不同,它們以參數(shù)的個(gè)數(shù)和類型不同來區(qū)分。數(shù)的個(gè)數(shù)和類型不同來區(qū)分。 關(guān)鍵字關(guān)鍵字this的使用:的使用: 在構(gòu)造函數(shù)或其他函數(shù)中有時(shí)會(huì)用到關(guān)鍵字在構(gòu)造函數(shù)或其他函數(shù)中有時(shí)會(huì)用到關(guān)鍵字this,代表當(dāng)前對(duì)象。在類代表當(dāng)前對(duì)象。在類的成員函數(shù)中的成員函數(shù)中,若要使用本類的屬性和方法若要使用本類的屬性和方法,前面加前面加this,但??墒÷缘?墒÷詂lass X int a; void show( ) void method( ) a=5; /等價(jià)于等價(jià)于this.a=5; show( ); /等價(jià)于等價(jià)于this.sh

24、ow( ); 在某些情況下,在方法體中若局部變量與類的成員變量同在某些情況下,在方法體中若局部變量與類的成員變量同名,而此時(shí)又需要使用成員變量,就必須使用名,而此時(shí)又需要使用成員變量,就必須使用this關(guān)鍵字加關(guān)鍵字加以區(qū)分。以區(qū)分。class Y int a; int b; void init(int x,int y) int a=3; this.a=x; b=y; /等價(jià)于等價(jià)于this.b=y; this省略省略 當(dāng)使用默認(rèn)的構(gòu)造函數(shù)時(shí),由系統(tǒng)默認(rèn)初始化對(duì)象的成員變量當(dāng)使用默認(rèn)的構(gòu)造函數(shù)時(shí),由系統(tǒng)默認(rèn)初始化對(duì)象的成員變量 數(shù)值型數(shù)值型 0 boolean false char 0 對(duì)象對(duì)

25、象 null例:例:PersonInfo.java4.2.4 main函數(shù)函數(shù) 它表示一個(gè)它表示一個(gè)Java程序的起點(diǎn)程序的起點(diǎn),main函數(shù)必須放在一個(gè)類中定義函數(shù)必須放在一個(gè)類中定義.一個(gè)應(yīng)一個(gè)應(yīng)用程序可以包含一個(gè)或多個(gè)類用程序可以包含一個(gè)或多個(gè)類,但必須有一個(gè)且只能有一個(gè)類中要定義但必須有一個(gè)且只能有一個(gè)類中要定義main函數(shù)函數(shù),作為程序的入口作為程序的入口. main函數(shù)沒有返回值函數(shù)沒有返回值,有一個(gè)字符串?dāng)?shù)組參數(shù)有一個(gè)字符串?dāng)?shù)組參數(shù): public static void main(String args) 方法體方法體; 為了提高為了提高Java程序的靈活性程序的靈活性,Jav

26、a程序可以帶一個(gè)或多個(gè)命令行參數(shù)程序可以帶一個(gè)或多個(gè)命令行參數(shù),這些參數(shù)作為字符串一次性存放在這些參數(shù)作為字符串一次性存放在args數(shù)組的各個(gè)元素中數(shù)組的各個(gè)元素中.例例:Maintest.java4.3 對(duì)象對(duì)象4.3.1 對(duì)象的創(chuàng)建對(duì)象的創(chuàng)建1.聲明一個(gè)對(duì)象變量聲明一個(gè)對(duì)象變量 在在Java中中,有有3個(gè)數(shù)據(jù)類型個(gè)數(shù)據(jù)類型:基本數(shù)據(jù)類型基本數(shù)據(jù)類型(primitive type);引用類型引用類型(reference type)和和null類型類型.引用類型包括類類型引用類型包括類類型(含數(shù)組含數(shù)組)及接口類及接口類型型;null類型沒有名字類型沒有名字,其值只有其值只有null,它可以賦

27、值給任何引用類型它可以賦值給任何引用類型.例例: Person p1,p2; Dog d1,d2; String s;注注: (1)p1,p2,d1,d2,s僅僅是一個(gè)引用類型的變量?jī)H僅是一個(gè)引用類型的變量,而并不是對(duì)象而并不是對(duì)象 (2)為了區(qū)別對(duì)象本身和對(duì)象變量為了區(qū)別對(duì)象本身和對(duì)象變量,引入了句柄的概念引入了句柄的概念,句柄是引用類型句柄是引用類型 的變量標(biāo)識(shí)符的變量標(biāo)識(shí)符 (3)抽象類和接口不能創(chuàng)建對(duì)象抽象類和接口不能創(chuàng)建對(duì)象,但可以聲明很多個(gè)抽象類或接口的句但可以聲明很多個(gè)抽象類或接口的句 柄柄2.創(chuàng)建一個(gè)對(duì)象創(chuàng)建一個(gè)對(duì)象 創(chuàng)建指生成一個(gè)真正的對(duì)象創(chuàng)建指生成一個(gè)真正的對(duì)象,常常使用常

28、常使用new表達(dá)式語句表達(dá)式語句.例例: new A( ); /創(chuàng)建引用類型創(chuàng)建引用類型A的一個(gè)對(duì)象的一個(gè)對(duì)象 new String(“Hello”); /創(chuàng)建一個(gè)內(nèi)容為創(chuàng)建一個(gè)內(nèi)容為Hello的字符串對(duì)象的字符串對(duì)象注注: (1)創(chuàng)建對(duì)象的同時(shí)創(chuàng)建對(duì)象的同時(shí),要進(jìn)行一系列復(fù)雜的對(duì)象初始化工作要進(jìn)行一系列復(fù)雜的對(duì)象初始化工作 (2)對(duì)象被創(chuàng)建時(shí)對(duì)象被創(chuàng)建時(shí),才真正的產(chǎn)生才真正的產(chǎn)生3.句柄與對(duì)象句柄與對(duì)象 聲明句柄與創(chuàng)建對(duì)象是可以相互獨(dú)立存在的聲明句柄與創(chuàng)建對(duì)象是可以相互獨(dú)立存在的 public class A407 private String s; /句柄聲明句柄聲明 public sta

29、tic void main(String args) String str; /句柄聲明句柄聲明 System.out.println(new A407().s); /對(duì)象創(chuàng)建對(duì)象創(chuàng)建 / System.out.println(str);/ str未初始化未初始化 Java中常常將兩者結(jié)合成一個(gè)語句中常常將兩者結(jié)合成一個(gè)語句,即把即把new表達(dá)式的值賦值給句柄表達(dá)式的值賦值給句柄npublic class A408n private String s;n public static void main(String args)n A408 a=new A408();n System.out.p

30、rintln(a.s);n String str= new String(這是字符串對(duì)象這是字符串對(duì)象);n a.s=hello ,+str;n System.out.println(str);n System.out.println(a.s);n n4.3.2 對(duì)象初始化對(duì)象初始化 創(chuàng)建對(duì)象與對(duì)象初始化是同時(shí)進(jìn)行不可分割的創(chuàng)建對(duì)象與對(duì)象初始化是同時(shí)進(jìn)行不可分割的.對(duì)象初始化就是給新對(duì)對(duì)象初始化就是給新對(duì)象的所有成員變量賦值象的所有成員變量賦值,從而設(shè)定對(duì)象的初始狀態(tài)從而設(shè)定對(duì)象的初始狀態(tài).1.默認(rèn)初始化和賦值初始化默認(rèn)初始化和賦值初始化 創(chuàng)建對(duì)象時(shí)會(huì)為對(duì)象分配一定大小的內(nèi)存空間創(chuàng)建對(duì)象時(shí)會(huì)為

31、對(duì)象分配一定大小的內(nèi)存空間,并同時(shí)為所有成員初始并同時(shí)為所有成員初始化一個(gè)默認(rèn)值化一個(gè)默認(rèn)值,以確保在分配空間的過程中對(duì)象的成員變量不會(huì)意外地?fù)硪源_保在分配空間的過程中對(duì)象的成員變量不會(huì)意外地?fù)碛须S機(jī)值有隨機(jī)值. 當(dāng)然當(dāng)然,在聲明成員變量之后在聲明成員變量之后,也可以給它指定一個(gè)初始值也可以給它指定一個(gè)初始值,即賦值初始化即賦值初始化2.構(gòu)造器初始化構(gòu)造器初始化 即調(diào)用構(gòu)造函數(shù)對(duì)成員變量進(jìn)行初始化即調(diào)用構(gòu)造函數(shù)對(duì)成員變量進(jìn)行初始化,構(gòu)造函數(shù)存在的意義就在于創(chuàng)構(gòu)造函數(shù)存在的意義就在于創(chuàng)建出不同初始狀態(tài)的同類對(duì)象建出不同初始狀態(tài)的同類對(duì)象.例例:A410.java3.初始化塊初始化塊 初始化塊是進(jìn)

32、行復(fù)雜初始化的另一個(gè)手段初始化塊是進(jìn)行復(fù)雜初始化的另一個(gè)手段.它出現(xiàn)在類體中它出現(xiàn)在類體中,與成員變與成員變量量,方法方法,構(gòu)造器平起平坐構(gòu)造器平起平坐.它們?nèi)缤环旁陬惖拿恳粋€(gè)構(gòu)造器的開頭一樣被它們?nèi)缤环旁陬惖拿恳粋€(gè)構(gòu)造器的開頭一樣被執(zhí)執(zhí)行行,多個(gè)塊則按它們?cè)陬愔械捻樞驁?zhí)行多個(gè)塊則按它們?cè)陬愔械捻樞驁?zhí)行.例例:A411.java4.3.3 對(duì)象的使用對(duì)象的使用1.基本概念基本概念 兩個(gè)交互的對(duì)象稱為客戶端與服務(wù)器關(guān)系兩個(gè)交互的對(duì)象稱為客戶端與服務(wù)器關(guān)系,客戶端按照服務(wù)器接口的格客戶端按照服務(wù)器接口的格式發(fā)送消息式發(fā)送消息. 接口格式即方法的類型簽名接口格式即方法的類型簽名:方法頭中有返回值

33、類型方法頭中有返回值類型,方法名方法名,形參列表形參列表,異常列表等異常列表等,我們把形參列表類型和返回值類型的下面的格式稱為方法的我們把形參列表類型和返回值類型的下面的格式稱為方法的類型簽名類型簽名:例例 String addt(A a, int b) 的類型簽名是的類型簽名是:AintString 在發(fā)送消息時(shí)在發(fā)送消息時(shí),消息參數(shù)必須與消息參數(shù)必須與Aint匹配匹配,而保存消息返回值的變量而保存消息返回值的變量必必須與須與String匹配匹配. 在客戶端看來在客戶端看來, 類型簽名就是接口的一切類型簽名就是接口的一切,不必知道接口的實(shí)現(xiàn)細(xì)節(jié)不必知道接口的實(shí)現(xiàn)細(xì)節(jié). 例例:A412.jav

34、a利用消息的發(fā)送與響應(yīng)利用消息的發(fā)送與響應(yīng),簡(jiǎn)單描述父母通過郵局將錢送到簡(jiǎn)單描述父母通過郵局將錢送到孩子的手中孩子的手中.2.消息的傳遞消息的傳遞 消息傳遞是指請(qǐng)求一個(gè)服務(wù)器對(duì)象去執(zhí)行一項(xiàng)特定行為的過程消息傳遞是指請(qǐng)求一個(gè)服務(wù)器對(duì)象去執(zhí)行一項(xiàng)特定行為的過程. 例例:aPostoffice.remittanceServe(500,child)是一個(gè)消息傳遞表達(dá)式是一個(gè)消息傳遞表達(dá)式,包括三個(gè)部分包括三個(gè)部分:句柄句柄, 服務(wù)接口服務(wù)接口, 實(shí)參列表實(shí)參列表4.3.4 對(duì)象的清除對(duì)象的清除1.對(duì)象的內(nèi)存分配對(duì)象的內(nèi)存分配 最重要的內(nèi)存分配方式有兩種最重要的內(nèi)存分配方式有兩種:一種是在一種是在sta

35、ck中中分配分配,用于為局部變量分配內(nèi)存用于為局部變量分配內(nèi)存;一種是在一種是在heap中分中分配配,用于為全局變量分配內(nèi)存用于為全局變量分配內(nèi)存. Java中對(duì)象的生命周期不存在作用域限制中對(duì)象的生命周期不存在作用域限制,因此因此永永遠(yuǎn)在遠(yuǎn)在heap中分配中分配. 如下例如下例:n例例:class Carn void honk(int n)n System.out.println(按喇叭按喇叭+n +下下);n nnpublic class A413n public static void main(String args)n Car c;n n Car c777=new Car();n c

36、777.honk(3) ;n /System.out.println(c777);n c=c777; /搬到作用域外試試搬到作用域外試試n /* c777作用域的終點(diǎn)處作用域的終點(diǎn)處*/n /c=c777;n c.honk(5) ;n n2.垃圾收集器垃圾收集器 一個(gè)對(duì)象變得沒有辦法使用一個(gè)對(duì)象變得沒有辦法使用所有指向該對(duì)象的句柄都失效所有指向該對(duì)象的句柄都失效,它就不它就不再有存在的必要再有存在的必要,則此對(duì)象就成為垃圾則此對(duì)象就成為垃圾.為了減輕程序員的負(fù)擔(dān)為了減輕程序員的負(fù)擔(dān),Java系統(tǒng)系統(tǒng)提供垃圾收集器提供垃圾收集器. 垃圾收集器垃圾收集器(GC)在后臺(tái)運(yùn)行在后臺(tái)運(yùn)行,它會(huì)定時(shí)查看所

37、有對(duì)象它會(huì)定時(shí)查看所有對(duì)象,需要說明的是需要說明的是:(1)GC是周期性地運(yùn)行是周期性地運(yùn)行,因此對(duì)象的清除并不是在所有指向它的句柄都被因此對(duì)象的清除并不是在所有指向它的句柄都被 移去之后立即進(jìn)行移去之后立即進(jìn)行(2)GC只有在只有在heap空間緊張時(shí)才立即投入工作空間緊張時(shí)才立即投入工作(3)對(duì)象除了占據(jù)對(duì)象除了占據(jù)heap空間外空間外,還使用了一些非內(nèi)存資源如打開的文件還使用了一些非內(nèi)存資源如打開的文件 等等,而而GC并不能完全釋放這些資源并不能完全釋放這些資源,因此因此,Java提供提供finalize()方法方法,用來用來 進(jìn)行對(duì)象相關(guān)的一些清除操作進(jìn)行對(duì)象相關(guān)的一些清除操作.但是由于

38、不能確定但是由于不能確定GC何時(shí)回收垃圾對(duì)何時(shí)回收垃圾對(duì) 象象,因此程序員很少使用因此程序員很少使用finalize()方法方法.4.4 數(shù)組數(shù)組 Java語言中,數(shù)組是獨(dú)立的類,有其自身的屬性和方法,不是變量的集合.4.4.1 數(shù)組聲明: 數(shù)組類型 數(shù)組名 ; 數(shù)組類型 數(shù)組名 ; 數(shù)組類型 數(shù)組名; 數(shù)組類型 數(shù)組名; 數(shù)組類型可以為int, float, boolean, char, double, String, Object例:int int_Array ; float float_Array ; char char_Array ;注:通過上述聲明,只是建立了一種數(shù)組的引用,并沒有對(duì)

39、數(shù)組元素分配內(nèi)存,在對(duì)數(shù)組使用前必須利用new語句為數(shù)組分配內(nèi)存,確定數(shù)組中元素的個(gè)數(shù),并賦初值.4.4.2 數(shù)組的創(chuàng)建和初始化(1)數(shù)組的創(chuàng)建將給數(shù)組分配內(nèi)存空間,并確定數(shù)組元素的個(gè)數(shù)一維數(shù)組: 數(shù)組名=new數(shù)據(jù)類型數(shù)組元素個(gè)數(shù) 或聲明同時(shí)創(chuàng)建數(shù)組 數(shù)據(jù)類型 數(shù)組名 =new 數(shù)據(jù)類型數(shù)組元素個(gè)數(shù) 或數(shù)據(jù)類型 數(shù)組名=new數(shù)據(jù)類型數(shù)組元素個(gè)數(shù)二維數(shù)組: 數(shù)組名=new 數(shù)據(jù)類型數(shù)組元素個(gè)數(shù)1數(shù)組元素個(gè)數(shù)2 例: int_Array=new int32; char_Array=new char32;4.4 數(shù)組數(shù)組(續(xù)續(xù))(2)數(shù)組初始化數(shù)組初始化一維數(shù)組初始化一維數(shù)組初始化: 數(shù)組名數(shù)組

40、名下標(biāo)下標(biāo)=元素值元素值;二維數(shù)組初始化二維數(shù)組初始化: 數(shù)組名數(shù)組名下標(biāo)下標(biāo)1下標(biāo)下標(biāo)2=元素值元素值;例例: int_Array12=3; char_Array3=c; 也可以將聲明、創(chuàng)建、初始化用一條語句來完成也可以將聲明、創(chuàng)建、初始化用一條語句來完成一維一維: 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名 =元素值元素值1,元素值元素值2,元素值元素值i;二維二維: 數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名 =元素值元素值1,元素值元素值2,元素值元素值i*j;例例: int int_Array =1,2,3,4,5,6; char char_Array =A,B,C;4.4.3 獲得數(shù)組大小獲得數(shù)組大小一維

41、數(shù)組一維數(shù)組: 整型變量整型變量=一維數(shù)組名稱一維數(shù)組名稱.length;二維數(shù)組二維數(shù)組: (1)獲得行數(shù)獲得行數(shù): 整型變量整型變量=二維數(shù)組名稱二維數(shù)組名稱.length; (2)獲得列數(shù)獲得列數(shù): 整型變量整型變量=二維數(shù)組名稱二維數(shù)組名稱第一維度下標(biāo)第一維度下標(biāo).length;程序舉例程序舉例: A414.java A415.java YanghuiTriangle.java4.4.4 與數(shù)組有關(guān)的系統(tǒng)函數(shù)與數(shù)組有關(guān)的系統(tǒng)函數(shù)1.數(shù)組復(fù)制數(shù)組復(fù)制 System.arraycopy()public static void arraycopy(Object src,int srcPos,

42、Object dest, int destPos,int length)例:例:arraycopy(source,0,dest,0,x)表示復(fù)制源數(shù)組中從下標(biāo)表示復(fù)制源數(shù)組中從下標(biāo)0開始的開始的x個(gè)元個(gè)元素到目標(biāo)數(shù)組,從目標(biāo)數(shù)組的下標(biāo)素到目標(biāo)數(shù)組,從目標(biāo)數(shù)組的下標(biāo)0對(duì)應(yīng)的位置開始存放。對(duì)應(yīng)的位置開始存放。 例:例:TestArrayCopy.java2.數(shù)組排序數(shù)組排序Arrays.sort()格式:格式:Arrays.sort(數(shù)組變量名數(shù)組變量名)功能:將元素由小到大排序,結(jié)果仍然放在源數(shù)組中功能:將元素由小到大排序,結(jié)果仍然放在源數(shù)組中例:例:ArrSort.java4.5 包包 包是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特色之一,包在很大程度上體現(xiàn)了OOP的封裝機(jī)制.它把一組類和接口封裝在一個(gè)包內(nèi),這為管理大量的類和接口提供了

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論