古代詩(shī)詞知識(shí)競(jìng)賽_第1頁(yè)
古代詩(shī)詞知識(shí)競(jìng)賽_第2頁(yè)
古代詩(shī)詞知識(shí)競(jìng)賽_第3頁(yè)
古代詩(shī)詞知識(shí)競(jìng)賽_第4頁(yè)
古代詩(shī)詞知識(shí)競(jìng)賽_第5頁(yè)
已閱讀5頁(yè),還剩102頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章類和對(duì)象第7章類和對(duì)象1第7章類和對(duì)象7.1面向?qū)ο缶幊袒靖拍?.2類和對(duì)象7.3注解主要內(nèi)容第7章類和對(duì)象7.1面向?qū)ο缶幊袒靖拍钪饕獌?nèi)容2古代詩(shī)詞知識(shí)競(jìng)賽3古代詩(shī)詞知識(shí)競(jìng)賽47.1面向?qū)ο缶幊袒靖拍?.1面向?qū)ο缶幊袒靖拍?面向?qū)ο笏枷胧侨祟愖钭匀坏囊环N思考方式它將所有預(yù)處理的問(wèn)題抽象為對(duì)象,同時(shí)了解這些對(duì)象具有相應(yīng)的屬性以及展示這些對(duì)象的行為,以解決這些對(duì)象面臨的一些實(shí)際問(wèn)題,這樣就在程序開發(fā)中引入了面向?qū)ο笤O(shè)計(jì)的概念。7.1面向?qū)ο缶幊袒靖拍蠲嫦驅(qū)ο笏枷胧侨祟愖钭匀坏囊环N思考方式7.1面向?qū)ο缶幊袒?7.1.1什么是對(duì)象現(xiàn)實(shí)世界中,隨處可見的一種事物就是對(duì)象對(duì)象就是客觀世界中存在的人、事和物體等實(shí)體。人類解決問(wèn)題的方式總是將復(fù)雜的事物簡(jiǎn)單化,于是就會(huì)思考這些對(duì)象都是由哪些部分組成的。7.1.1什么是對(duì)象現(xiàn)實(shí)世界中,隨處可見的一種事物就是對(duì)7對(duì)象(object),對(duì)象是自然物體(如汽車、房屋、狗),也可以是社會(huì)生活中一種邏輯結(jié)構(gòu)(如班級(jí)、部門、組織),甚至一篇文章、一個(gè)圖形、一項(xiàng)計(jì)劃等都可以視作對(duì)象。對(duì)象是構(gòu)成系統(tǒng)的基本單位,在實(shí)際社會(huì)生活中,人們都是在不同的對(duì)象中活動(dòng)的。7.1.1什么是對(duì)象對(duì)象(object),對(duì)象是自然物體(如汽車、房屋、狗),也87.1.1什么是對(duì)象通常將對(duì)象劃分為兩個(gè)部分,即動(dòng)態(tài)部分與靜態(tài)部分。靜態(tài)部分,顧名思義,就是不能動(dòng)的部分,這個(gè)部分被稱為“屬性”。任何對(duì)象都會(huì)具備其自身屬性,例如一個(gè)人,它包括高矮、胖瘦、性別、年齡等。然而具有這些屬性的人會(huì)執(zhí)行哪些動(dòng)作也是一個(gè)值得探討的部分,這個(gè)人可以哭泣、微笑、說(shuō)話、行走,這些是這個(gè)人具備的行為(動(dòng)態(tài)部分)人類通過(guò)探討對(duì)象的屬性和觀察對(duì)象的行為了解對(duì)象。7.1.1什么是對(duì)象通常將對(duì)象劃分為兩個(gè)部分,即動(dòng)態(tài)部分9任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,屬性(attribute)和行為(behavior),一個(gè)對(duì)象往往由一組屬性和一組行為構(gòu)成,凡是具備屬性和行為這兩個(gè)要素的,都可以作為對(duì)象.7.1.1什么是對(duì)象任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,7.1.1什么是對(duì)象107.1.1什么是對(duì)象在計(jì)算機(jī)的世界中,面向?qū)ο蟪绦蛟O(shè)計(jì)的思想要以對(duì)象來(lái)思考問(wèn)題,首先要將現(xiàn)實(shí)世界的實(shí)體抽象為對(duì)象,然后考慮這個(gè)對(duì)象具備的屬性和行為。7.1.1什么是對(duì)象在計(jì)算機(jī)的世界中,面向?qū)ο蟪绦蛟O(shè)計(jì)的117.1.1什么是對(duì)象例如,現(xiàn)在面臨一只大雁要從北方飛往南方這樣一個(gè)實(shí)際問(wèn)題,試著以面向?qū)ο蟮乃枷雭?lái)解決這一實(shí)際問(wèn)題。步驟如下:1)首先可以從這一問(wèn)題中抽象出對(duì)象,這里抽象出的對(duì)象為大雁。2)然后識(shí)別這個(gè)對(duì)象的屬性。對(duì)象具備的屬性都是靜態(tài)屬性,例如大雁有一對(duì)翅膀、黑色的羽毛等。這些屬性如圖所示。7.1.1什么是對(duì)象例如,現(xiàn)在面臨一只大雁要從北方飛往南127.1.1什么是對(duì)象3)接著是識(shí)別這個(gè)對(duì)象的動(dòng)態(tài)行為,即這只大雁可以進(jìn)行的動(dòng)作,例如飛行、覓食等,這些行為都是因?yàn)檫@個(gè)對(duì)象基于其屬性而具有的動(dòng)作。4)識(shí)別出這些對(duì)象的屬性和行為后,這個(gè)對(duì)象就被定義完成。7.1.1什么是對(duì)象3)接著是識(shí)別這個(gè)對(duì)象的動(dòng)態(tài)行為,即137.1.1什么是對(duì)象實(shí)質(zhì)上究其本質(zhì),所有的大雁都具有以上的屬性和行為,可以將這些屬性和行為封裝起來(lái)以描述大雁這類動(dòng)物。由此可見,類實(shí)質(zhì)上就是封裝對(duì)象屬性和行為的載體,而對(duì)象則是類抽象出來(lái)的一個(gè)實(shí)例,二者之間的關(guān)系如圖7-3所示。7.1.1什么是對(duì)象實(shí)質(zhì)上究其本質(zhì),所有的大雁都具有以上147.1.1什么是對(duì)象7.1.1什么是對(duì)象157.1.1什么是對(duì)象人數(shù)據(jù)(屬性)Stringname;intage;intid;方法(行為)生物行為eat(),sleep(),…社會(huì)行為work(),study(),…7.1.1什么是對(duì)象人167.1.2什么是類類就是同一類事物的統(tǒng)稱。如果將現(xiàn)實(shí)世界中的一個(gè)事物抽象成對(duì)象,類就是這類對(duì)象的統(tǒng)稱,比如鳥類、家禽類、人類等。類是構(gòu)造對(duì)象時(shí)所依賴的規(guī)范。比如,一只鳥具有一對(duì)翅膀,而它可以通過(guò)這對(duì)翅膀飛行,而基本上所有的鳥都具有翅膀這個(gè)特性和飛行的技能,這樣的具有相同特性和行為的一類事物就稱為類。7.1.2什么是類類就是同一類事物的統(tǒng)稱。177.1.2什么是類對(duì)象就是符合某個(gè)類定義所產(chǎn)生出來(lái)的實(shí)例。更為恰當(dāng)?shù)拿枋鍪牵侯愂鞘篱g事物的抽象稱呼,而對(duì)象則是這個(gè)事物相對(duì)應(yīng)的實(shí)體。如果面臨實(shí)際問(wèn)題,通常需要實(shí)例化類對(duì)象來(lái)解決。比如解決大雁南飛的問(wèn)題,這里只能拿這只大雁來(lái)處理這個(gè)問(wèn)題,不能拿大雁類或是鳥類來(lái)解決。7.1.2什么是類對(duì)象就是符合某個(gè)類定義所產(chǎn)生出來(lái)的實(shí)例187.1.2什么是類類是封裝對(duì)象的屬性和行為的載體,反過(guò)來(lái)說(shuō)具有相同屬性和行為的一類實(shí)體被稱為類。例如一個(gè)鳥類,鳥類封裝了所有鳥的共同屬性和應(yīng)具有的行為,其結(jié)構(gòu)如圖7-4所示。7.1.2什么是類類是封裝對(duì)象的屬性和行為的載體,反過(guò)來(lái)197.1.2什么是類說(shuō)明:在Java語(yǔ)言中,類中對(duì)象的行為是由方法的形式定義的,對(duì)象的屬性是由成員變量的形式定義的,一個(gè)類包括對(duì)象的屬性和方法。7.1.2什么是類說(shuō)明:在Java語(yǔ)言中,類中對(duì)象的行為207.1.3什么是封裝面向?qū)ο蟪绦蛟O(shè)計(jì)具有以下特點(diǎn):封裝性繼承性多態(tài)性封裝是面向?qū)ο缶幊痰暮诵乃枷?,將?duì)象的屬性和行為封裝起來(lái),而將對(duì)象的屬性和行為封裝起來(lái)的載體就是類,類通常對(duì)客戶隱藏其實(shí)現(xiàn)細(xì)節(jié),這就是封裝的思想。7.1.3什么是封裝面向?qū)ο蟪绦蛟O(shè)計(jì)具有以下特點(diǎn):217.1.3什么是封裝采用封裝的思想保證了類內(nèi)部數(shù)據(jù)結(jié)構(gòu)的完整性,用戶不能輕易直接操縱此數(shù)據(jù)結(jié)構(gòu),而只能執(zhí)行類允許公開的數(shù)據(jù)。這樣避免了外部對(duì)內(nèi)部數(shù)據(jù)的影響,提高程序的可維護(hù)性。7.1.3什么是封裝采用封裝的思想保證了類內(nèi)部數(shù)據(jù)結(jié)構(gòu)的227.1.4什么是繼承類與類之間同樣具有關(guān)系,類之間這種關(guān)系被稱為關(guān)聯(lián)。關(guān)聯(lián)是描述兩個(gè)類之間的一般二元關(guān)系。兩個(gè)類之間的關(guān)系有很多種,繼承是關(guān)聯(lián)中的一種。當(dāng)處理一個(gè)問(wèn)題時(shí),可以將一些有用的類保留下來(lái),當(dāng)遇到同樣問(wèn)題時(shí)拿來(lái)復(fù)用。7.1.4什么是繼承類與類之間同樣具有關(guān)系,類之間這種關(guān)23如果在軟件開發(fā)中已建立了一個(gè)名為A的類,又想建立一個(gè)名為B的類,而后者與前者內(nèi)容基本相同,只是在前者基礎(chǔ)上增加一些新的屬性和行為,顯然不必再?gòu)念^設(shè)計(jì)一個(gè)新類,只需在A類的基礎(chǔ)上增加一些新的內(nèi)容即可,而B類的對(duì)象擁有A類的全部屬性與方法,稱作B類對(duì)A類的繼承,在B類中不必重新定義已在A類中定義過(guò)的屬性和方法,這種特性在面向?qū)ο笾蟹Q作對(duì)象的繼承。7.1.4什么是繼承如果在軟件開發(fā)中已建立了一個(gè)名為A的類,又想建立一個(gè)名為B的247.1.4什么是繼承由于鴿子屬于鳥類,鴿子具有鳥類相同的屬性和行為。便可以在創(chuàng)建信鴿類時(shí)將鳥類拿來(lái)復(fù)用,并且保留鳥類具有的屬性和行為。不過(guò),并不是所有的鳥都有送信的習(xí)慣,因此還需要再添加一些信鴿具有的獨(dú)特屬性以及行為。鴿子類保留了鳥類的屬性和行為,這樣就節(jié)省了定義鳥和鴿子共同具有的屬性和行為的時(shí)間,這就是繼承的基本思想。7.1.4什么是繼承由于鴿子屬于鳥類,鴿子具有鳥類相同的257.1.4什么是繼承繼承性主要利用特定對(duì)象之間的共有屬性。例如,平行四邊形是四邊形,可以將平行四邊形類看作四邊形的延伸,平行四邊形復(fù)用了四邊形的屬性和行為,同時(shí)添加了平行四邊形獨(dú)有的屬性和行為,如平行四邊形的對(duì)邊平行且相等。這里可以將平行四邊形類看作是從四邊形類中繼承的。7.1.4什么是繼承繼承性主要利用特定對(duì)象之間的共有屬性267.1.4什么是繼承在Java語(yǔ)言中將類似于平行四邊形的類稱為子類,將類似于四邊形的類稱為父類或超類。值得注意的是,可以說(shuō)平行四邊形是特殊的四邊形,但不能說(shuō)四邊形是平行四邊形,也就是說(shuō)子類的實(shí)例都是父類的實(shí)例,但不能說(shuō)父類的實(shí)例是子類的實(shí)例。7.1.4什么是繼承在Java語(yǔ)言中將類似于平行四邊形的277.1.4什么是繼承7.1.4什么是繼承28多態(tài)性是指在基類中定義的屬性或方法被派生類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。為了實(shí)現(xiàn)多態(tài)性,需要在派生類中更改從基類中自動(dòng)繼承來(lái)的數(shù)據(jù)類型或方法。這種為了替換基類的部分內(nèi)容而在派生類中重新進(jìn)行定義的操作,在面向?qū)ο蟮母拍钪蟹Q為覆蓋。7.1.5什么是多態(tài)多態(tài)性是指在基類中定義的屬性或方法被派生類繼承后,可以具有不297.2類和對(duì)象7.2.1訪問(wèn)權(quán)限修飾符7.2.2類的定義7.2.3成員變量的定義7.2.4普通方法的定義7.2.5局部變量的定義7.2.6構(gòu)造方法的定義7.2.7方法參數(shù)的傳遞7.2類和對(duì)象7.2.1訪問(wèn)權(quán)限修飾符307.2類和對(duì)象7.2.8對(duì)象創(chuàng)建和使用7.2.9this關(guān)鍵字的用途7.2.10static關(guān)鍵字的用途7.2.11final關(guān)鍵字的用途7.2.12包的定義與使用7.2類和對(duì)象7.2.8對(duì)象創(chuàng)建和使用317.2.1訪問(wèn)權(quán)限修飾符主要包括private、public和protected,用來(lái)決定類中成員變量和方法能否被其它類訪問(wèn)。類的訪問(wèn)權(quán)限:public:可以供所有的類訪問(wèn)。

默認(rèn)(包訪問(wèn)權(quán)限):

即如果寫了一個(gè)類沒(méi)有寫訪問(wèn)權(quán)限修飾符,那么就是默認(rèn)的訪問(wèn)權(quán)限,同一個(gè)包下的類都可以訪問(wèn)到。protected和private只能應(yīng)用內(nèi)部類,不能應(yīng)用于頂層類。7.2.1訪問(wèn)權(quán)限修飾符主要包括private、publ327.2.1訪問(wèn)權(quán)限修飾符類訪問(wèn)權(quán)限說(shuō)明:每個(gè)編譯單元(類文件)都僅能有一個(gè)publicclass

。publicclass的名稱(包含大小寫)必須和其類文件同名。一個(gè)類文件(*.java)中可以不存在publicclassclass不可以是private和protected。(除了內(nèi)部類之外)

。7.2.1訪問(wèn)權(quán)限修飾符類訪問(wèn)權(quán)限說(shuō)明:337.2.1訪問(wèn)權(quán)限修飾符公共類的成員變量和成員方法的訪問(wèn)權(quán)限:public成員,除了可以在本類使用這些數(shù)據(jù)之外,還可以在子類和其他包中的類中使用private成員只能在本類中被使用,在子類中是不可見的,并且對(duì)其他包的類也是不可見的。protected成員可以由子類訪問(wèn),如果既不是同包,也不是子類,則不可見。7.2.1訪問(wèn)權(quán)限修飾符公共類的成員變量和成員方法的訪問(wèn)34訪問(wèn)權(quán)限修飾符同一個(gè)類同一個(gè)包子類(異包)非同包public可見可見可見可見protected可見可見可見不可見無(wú)修飾符可見可見不可見不可見private可見不可見不可見不可見表7-1訪問(wèn)權(quán)限修飾符在不同位置的訪問(wèn)范圍7.2.1訪問(wèn)權(quán)限修飾符訪問(wèn)權(quán)限修飾符同一個(gè)類同一個(gè)包子類非同包public可見可見357.2.1訪問(wèn)權(quán)限修飾符對(duì)于一個(gè)類內(nèi)部定義的成員,無(wú)論使用何種修飾符都是可以被這個(gè)類訪問(wèn)的。在同一個(gè)包中,不管類是否存在繼承關(guān)系,僅有private修飾的成員不能夠被其他類使用。在不同的包中,如果兩個(gè)類存在繼承關(guān)系,則使用protected修飾的成員可見。在全局范圍,僅有public修飾的成員可見。7.2.1訪問(wèn)權(quán)限修飾符對(duì)于一個(gè)類內(nèi)部定義的成員,無(wú)論使367.2.2類的定義類是用來(lái)定義一組對(duì)象共具的狀態(tài)和行為的模板。而對(duì)象是現(xiàn)實(shí)世界中個(gè)體或事物的抽象表示,并封裝了它們的屬性和行為。類聲明了這些共同的特性,對(duì)象在使用之前,必須定義該對(duì)象的類,知道了對(duì)象的類型,才能夠訪問(wèn)它的屬性和行為。在Java語(yǔ)言中,對(duì)象的行為被定義成類的方法,對(duì)象的屬性定義為類成員變量。所以一個(gè)類包括對(duì)象的屬性和行為。7.2.2類的定義類是用來(lái)定義一組對(duì)象共具的狀態(tài)和行為的377.2.2類的定義表示類的屬性表示類的行為classclassName{

成員變量

……

成員方法

……}7.2.2類的定義表示類的屬性表示類的行為classc387.2.2類的定義通常情況下類的定義可以依次包括如下內(nèi)容:訪問(wèn)權(quán)限修飾符,例如public、private等。類名,通常是首字母大寫的英語(yǔ)名詞。類的父類,需要使用extends關(guān)鍵字。一個(gè)類僅能有一個(gè)父類。類實(shí)現(xiàn)的接口,需要使用implements關(guān)鍵字。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,接口名之間使用逗號(hào)分隔。類體,使用大括號(hào)包圍。publicclass

className

extendsMyClass

implementsMyInterface{}7.2.2類的定義通常情況下類的定義可以依次包括如下內(nèi)容397.2.2類的定義【例】定義一個(gè)水果類Fruit,在該類中定義了一個(gè)表示顏色的屬性color、一個(gè)表示種植的方法plant()、一個(gè)表示生長(zhǎng)的方法grow()和一個(gè)表示收獲的方法harvest()。7.2.2類的定義【例】定義一個(gè)水果類Fruit,在該類407.2.2類的定義publicclassFruit{

publicStringcolor="";//定義顏色成員變量publicvoidplant(){

//定義種植成員方法

System.out.println("果樹正在種植……"); } publicvoidgrow(){//定義生長(zhǎng)的成員方法 System.out.println("果樹正在生長(zhǎng)……"); } publicvoidharvest(){//定義收獲的成員方法 System.out.println("水果已經(jīng)收獲……"); }}類名的首字母通常為大寫

Java允許每個(gè)文件包含一個(gè)或多個(gè)類定義,但其中最多只能有一個(gè)類被聲明為public。7.2.2類的定義publicclassFruit417.2.3成員變量的定義根據(jù)變量在類中聲明的位置不同,可以分為:聲明在類中的變量叫做成員變量。聲明在塊和方法中的變量叫做局部變量。聲明在方法聲明中的變量叫做參數(shù)。在聲明成員變量時(shí),不必為其初始化,在聲明局部變量時(shí),必須為其初始化。如果未對(duì)成員變量進(jìn)行初始化,其默認(rèn)初始化值如圖。7.2.3成員變量的定義根據(jù)變量在類中聲明的位置不同,可427.2.3成員變量的定義成員變量是在類體中定義的變量,即全局變量,成員變量用于定義對(duì)象的狀態(tài)。例如:Student類有name、age、sex等成員變量分別表示姓名、年齡、性別等狀態(tài)。publicclassStudent{ publicStringname; //姓名

publicintage; //年齡

publicStringsex; //性別}7.2.3成員變量的定義成員變量是在類體中定義的變量,即437.2.3成員變量的定義成員變量是給對(duì)象使用的,每個(gè)對(duì)象被創(chuàng)建以后,都會(huì)有屬于自己的屬性,即成員變量。通過(guò)修改這些屬性,從而改變對(duì)象的某個(gè)狀態(tài)。不同的實(shí)例對(duì)象有不同的屬性,如圖所示。7.2.3成員變量的定義成員變量是給對(duì)象使用的,每個(gè)對(duì)象447.2.3成員變量的定義【例7-1】在項(xiàng)目中創(chuàng)建Book類,在該類中定義書名、出版社、ISBN和價(jià)格四個(gè)成員變量。publicclassBook{privateStringtitle;

privateStringpress;

privateStringISBN;privatedoubleprice;}成員變量必須直接定義在類體中,如果定義在其他方法或代碼塊中,就會(huì)成為局部變量,而不是成員變量。7.2.3成員變量的定義【例7-1】在項(xiàng)目中創(chuàng)建Boo457.2.3成員變量的定義在聲明變量時(shí),需要包含下面3部分內(nèi)容:修飾符,包括訪問(wèn)權(quán)限修飾符等。例如代碼中的private。變量的類型,可使用基本類型和引用類型。例如代碼中的String和double。變量的名稱,通常推薦使用小寫英語(yǔ)名詞。例如代碼中的title、press、ISBN和price。7.2.3成員變量的定義在聲明變量時(shí),需要包含下面3部分467.2.4普通方法的定義成員方法是對(duì)象行為的描述。面向?qū)ο缶幊讨?,使用方法?lái)實(shí)現(xiàn)對(duì)象之間的通信和改變對(duì)象的屬性。成員方法主要承擔(dān)外部操作對(duì)象屬性的接口任務(wù)。成員變量和成員方法統(tǒng)稱為類成員。[修飾符]返回值類型方法名([形參表]){ ...//方法體 return返回值;}7.2.4普通方法的定義成員方法是對(duì)象行為的描述。成員變477.2.4普通方法的定義通常情況下,方法由6部分組成,依次是:1)修飾符,可以是public、private、protected以及static、final等。2)返回值,方法運(yùn)行的結(jié)果,如果沒(méi)有返回值需要使用void表明。3)方法名稱,程序?qū)⑼ㄟ^(guò)該名稱調(diào)用這個(gè)方法,通常使用首字母小寫的英語(yǔ)動(dòng)詞。7.2.4普通方法的定義通常情況下,方法由6部分組成,依487.2.4普通方法的定義通常情況下,方法由6部分組成,依次是:4)參數(shù)列表,說(shuō)明方法被調(diào)用時(shí),應(yīng)該向它傳遞的數(shù)據(jù),放在圓括號(hào)內(nèi),需要指明參數(shù)的類型和名稱,當(dāng)方法有多個(gè)形式參數(shù)時(shí),參數(shù)之間使用“,”逗號(hào)分割;如果方法沒(méi)有參數(shù),可以省略“形參表”部分。5)異常列表,使用throws關(guān)鍵字,在后面的章節(jié)進(jìn)行講解。6)方法體,放置在大括號(hào)之間的內(nèi)容。7.2.4普通方法的定義通常情況下,方法由6部分組成,依497.2.4普通方法的定義成員方法所處理數(shù)據(jù)的主要來(lái)源1)傳遞給成員方法的參數(shù)。2)類中的成員變量。3)在方法體內(nèi)聲明的局部變量。4)在方法中調(diào)用其他成員方法所得到的返回值。7.2.4普通方法的定義成員方法所處理數(shù)據(jù)的主要來(lái)源507.2.5局部變量的定義局部變量:在成員方法內(nèi)定義的變量,形參也被看作是局部變量。局部變量只在定義它的方法內(nèi)有效,在方法被執(zhí)行時(shí)創(chuàng)建,在方法執(zhí)行結(jié)束時(shí)被銷毀,局部變量在使用時(shí)必須進(jìn)行賦值操作或被初始化,否則會(huì)出現(xiàn)編譯錯(cuò)誤。7.2.5局部變量的定義局部變量:在成員方法內(nèi)定義的變量517.2.5局部變量的定義【例7-3】在項(xiàng)目中創(chuàng)建Sum類,在main()方法中計(jì)算1到50之間所有整數(shù)之和。public

classSum{

public

static

voidmain(String[]args){

intsum=0;

for(inti=1;i<51;i++){sum+=i;}}}7.2.5局部變量的定義【例7-3】在項(xiàng)目中創(chuàng)建Sum52局部變量的作用域注:局部變量(方法的形參)盡量不要和成員變量同名,否則,局部變量(方法的形參)將覆蓋該成員變量。局部變量的作用域注:局部變量(方法的形參)盡量不要和成員變量537.2.6構(gòu)造方法的定義其功能主要是完成對(duì)象的初始化,每當(dāng)類實(shí)例化一個(gè)對(duì)象時(shí),類都會(huì)自動(dòng)調(diào)用構(gòu)造方法。構(gòu)造方法與普通方法的差別主要有以下兩點(diǎn):不能有返回值,即沒(méi)有返回值類型。構(gòu)造方法的名稱與本類的類名完全相同。注意:不是void類型public類名([參數(shù)列表]){ //...構(gòu)造方法體}7.2.6構(gòu)造方法的定義其功能主要是完成對(duì)象的初始化,每547.2.6構(gòu)造方法的定義在構(gòu)造方法中可以完成變量賦值、連接數(shù)據(jù)庫(kù)等初始化工作,如果類中沒(méi)有明確定義任何構(gòu)造方法,則編譯器會(huì)自動(dòng)創(chuàng)建一個(gè)不帶參數(shù)的默認(rèn)構(gòu)造方法。注意:如果在類中定義的構(gòu)造方法都不是無(wú)參的構(gòu)造方法,則編譯器不會(huì)為類設(shè)置一個(gè)默認(rèn)的無(wú)參構(gòu)造方法,當(dāng)試圖調(diào)用無(wú)參構(gòu)造方法實(shí)例化一個(gè)對(duì)象時(shí),編譯器會(huì)報(bào)錯(cuò)。7.2.6構(gòu)造方法的定義在構(gòu)造方法中可以完成變量賦值、連557.2.6構(gòu)造方法的定義構(gòu)造方法的特點(diǎn)方法名與類名相同沒(méi)有返回類型,修飾符void也不能有通常被聲明為公有的(public)和成員方法一樣,構(gòu)造方法也可以重載主要作用是完成對(duì)象的初始化工作不能在程序中顯式的調(diào)用在生成一個(gè)對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類的構(gòu)造方法為新生成的對(duì)象初始化7.2.6構(gòu)造方法的定義構(gòu)造方法的特點(diǎn)567.2.6構(gòu)造方法的定義【例】定義Student類,在類中定義姓名、年齡和性別3個(gè)成員變量,再定義3個(gè)不同參數(shù)的構(gòu)造方法,其中有一個(gè)是無(wú)參數(shù)的默認(rèn)的構(gòu)造方法。然后定義sayMyInfo()方法輸出自己的信息。7.2.6構(gòu)造方法的定義【例】定義Student類,在類57publicclassStudent{ publicStringname; publicStringsex; publicintage; publicStudent(){ name="未登記"; sex="未登記"; age=0; }

publicStudent(Stringname){

this.name=name;

}publicclassStudent{ public58

publicStudent(Stringname,Stringsex,intage){

this(name);

this.sex=sex;

this.age=age; }

public

voidsayMyInfo(){ System.out.println("我的名字是:"+name); System.out.println("我是:"+sex+"生"); System.out.println("我"+age+"歲了");} publicStudent(Stringname,S59 publicstaticvoidmain(String[]args){ Studentstudent1=newStudent(); Studentstudent2=newStudent("張三"); Studentstudent3=newStudent("李四","男",14);student1.sayMyInfo();student2.sayMyInfo();student3.sayMyInfo(); }} publicstaticvoidmain(Strin60成員變量的初始化初始化成員變量有5個(gè)途徑:1)每個(gè)數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)類型有默認(rèn)的初始值。2)在聲明的同時(shí)賦予相應(yīng)的初始值。3)定義成員方法為成員變量賦值。4)在構(gòu)造方法中為成員變量賦值。5)利用初始化塊對(duì)成員變量進(jìn)行初始化成員變量的初始化初始化成員變量有5個(gè)途徑:61成員變量的初始化利用初始化塊對(duì)成員變量進(jìn)行初始化。publicclassPoint{privateintx=1,y=2;{ x=10;y=20;//初始化塊}publicPoint(){}publicPoint(intx1,inty1){x=x1;y=y1;}}成員變量的初始化利用初始化塊對(duì)成員變量進(jìn)行初始化。publi627.2.7方法參數(shù)的傳遞在方法的參數(shù)列表中,可以使用基本類型和引用類型,兩者的傳遞方式都是值傳遞。值傳遞就是先將參數(shù)復(fù)制一份,然后將復(fù)制的內(nèi)容傳遞到方法中。此時(shí)方法操作的內(nèi)容與原來(lái)的參數(shù)無(wú)關(guān)。7.2.7方法參數(shù)的傳遞在方法的參數(shù)列表中,可以使用基本63privatestaticvoidswap(Strings1,Strings2){Stringt=s1;s1=s2;s2=t;}publicstaticvoidmain(String[]args){Strings1="123";Strings2="abc";System.out.println("交換前:"+s1+""+s2);swap(s1,s2);System.out.println("交換后:"+s1+""+s2);}交換前:123abc交換后:123abcprivatestaticvoidswap(Strin647.2.7方法參數(shù)的傳遞【例7-7】定義Circle類和ReferenceDataType,演示使用引用類型作為參數(shù)的方法。7.2.7方法參數(shù)的傳遞【例7-7】定義Circle類和65public

classCircle{

private

intx;

private

inty;

public

intgetX(){returnx;}

public

voidsetX(intcX){

x=cX;}

public

intgetY(){returny;}

public

voidsetY(intcY){

y=cY;}}publicclassCircle{66public

classReferenceDataType{

private

staticCircletransform(Circlecircle,intx,inty){

circle.setX(x);//設(shè)置x坐標(biāo)

circle.setY(y);//設(shè)置y坐標(biāo)

returncircle;}

public

static

voidmain(String[]args){Circlecircle=newCircle();

System.out.println("進(jìn)入前"+circle);

transform(circle,5,5);

System.out.println("進(jìn)入后"+circle);}}publicclassReferenceDataType677.2.7方法參數(shù)的傳遞在JDK5.0版以后,可以為方法指定數(shù)量未知的參數(shù)列表,這些參數(shù)需要具有相同的類型。在使用時(shí),可以將其看成數(shù)組,通過(guò)遍歷數(shù)組來(lái)獲取所指定的參數(shù),獲取到的參數(shù)的個(gè)數(shù)將根據(jù)調(diào)用方法時(shí)指定的參數(shù)個(gè)數(shù)確定。privatestaticvoidprint(String...varargs){

for(inti=0;i<varargs.length;i++){System.out.print(varargs[i]+"");

}}7.2.7方法參數(shù)的傳遞在JDK5.0版以后,可以為方68

private

static

voidprint(String...varargs){

for(inti=0;i<varargs.length;i++){System.out.print(varargs[i]+"");

}}

public

static

voidmain(String[]args){

print("Java","PHP");

System.out.println();

print("Java","PHP","Java");

}privatestaticvoidprint(S69類的主方法主方法是類的入口點(diǎn),它定義了程序從何處開始,主方法提供對(duì)程序流向的控制,Java編譯器通過(guò)主方法來(lái)執(zhí)行程序。主方法的語(yǔ)法如下。publicstaticvoidmain(String[]args){ //方法體}主方法也是靜態(tài)的,所以要直接在主方法中調(diào)用其他方法,則該方法必須也是靜態(tài)的。主方法沒(méi)有返回值。主方法的形參為數(shù)組。注:如果在主方法中調(diào)用非靜態(tài)方法時(shí),可以先實(shí)例化該類,再通過(guò)類的實(shí)例調(diào)用相應(yīng)的方法。類的主方法主方法是類的入口點(diǎn),它定義了程序從何處開始,主方法70public

static

voidmain(String[]args){

for(inti=0;i<args.length;i++){

System.out.println(args[i]);

} }類的主方法publicstaticvoidmain(String717.2.8對(duì)象的創(chuàng)建和使用在Java語(yǔ)言中通過(guò)new操作符來(lái)創(chuàng)建對(duì)象,每實(shí)例化一個(gè)對(duì)象就會(huì)自動(dòng)調(diào)用一次構(gòu)造方法。 類名對(duì)象名=new類構(gòu)造方法();如:Testtest=newTest();Testtest=newTest("a");

7.2.8對(duì)象的創(chuàng)建和使用在Java語(yǔ)言中通過(guò)new操作727.2.8對(duì)象的創(chuàng)建和使用test對(duì)象被創(chuàng)建出來(lái)時(shí),test對(duì)象就是一個(gè)對(duì)象的引用,當(dāng)創(chuàng)建對(duì)象時(shí),自動(dòng)調(diào)用構(gòu)造方法,也就是說(shuō)在Java語(yǔ)言中初始化與創(chuàng)建是被捆綁在一起的。每個(gè)對(duì)象都是相互獨(dú)立的,在內(nèi)存中占據(jù)獨(dú)立的內(nèi)存地址,并且每個(gè)對(duì)象都具有自己的生命周期,當(dāng)一個(gè)對(duì)象的生命周期結(jié)束時(shí),對(duì)象變成了垃圾,由Java虛擬機(jī)自帶的垃圾回收機(jī)制處理,不能再被使用。7.2.8對(duì)象的創(chuàng)建和使用test對(duì)象被創(chuàng)建出來(lái)時(shí),te737.2.8對(duì)象的創(chuàng)建和使用【例7-9】為創(chuàng)建的ObjectCreation類定義一個(gè)構(gòu)造方法。在main()方法中,創(chuàng)建該類對(duì)象。publicclassObjectCreation{

publicObjectCreation(){//創(chuàng)建類的構(gòu)造方法

System.out.println("創(chuàng)建OC類的對(duì)象");}publicstaticvoidmain(String[]args){

ObjectCreationobj=newObjectCreation();

}}當(dāng)用戶使用new操作符創(chuàng)建一個(gè)對(duì)象后,可以使用“對(duì)象.類成員”來(lái)獲取對(duì)象的屬性和行為。7.2.8對(duì)象的創(chuàng)建和使用【例7-9】為創(chuàng)建的Obje74publicclassmyapp{inti=47;publicvoidcall(){System.out.println("i的值為"+i);

}publicstaticvoidmain(String[]args){myappt1=newmyapp();myappt2=newmyapp();t2.i=60;System.out.println("對(duì)象1:"

+t1.i);t1.call();System.out.println("對(duì)象2:"

+t2.i);t2.call();

}}對(duì)象1:47i的值為47對(duì)象2:60i的值為60publicclassmyapp{對(duì)象1:4775對(duì)象的銷毀Java語(yǔ)言提供了垃圾回收機(jī)制,對(duì)于不再使用的對(duì)象會(huì)自動(dòng)銷毀,也可以在程序中顯示的為某個(gè)對(duì)象賦值null值,使對(duì)象不再被使用。例如:whiteCar=null;垃圾回收器會(huì)找到并銷毀它,釋放該對(duì)象所占用的資源。對(duì)象的銷毀Java語(yǔ)言提供了垃圾回收機(jī)制,對(duì)于不再使用的對(duì)象767.2.9this關(guān)鍵字的用途在普通方法或者構(gòu)造方法中,this表示當(dāng)前對(duì)象的引用,即普通方法或者構(gòu)造方法被調(diào)用的對(duì)象。使用this就可以在普通方法和構(gòu)造方法中使用當(dāng)前對(duì)象的任何成員變量。this關(guān)鍵字有兩種用途:1)使用this來(lái)引用成員變量如果參數(shù)與成員變量重名,則會(huì)覆蓋成員變量,此時(shí)可以使用this來(lái)引用成員變量進(jìn)行區(qū)分。7.2.9this關(guān)鍵字的用途在普通方法或者構(gòu)造方法中,777.2.9this關(guān)鍵字的用途【例7-11】在項(xiàng)目中創(chuàng)建Book類,在構(gòu)造方法中初始化其狀態(tài)。publicclassBook{privateStringtitle;//定義字符串保存書名

privateStringpress;//定義字符串保存出版社

publicBook(Stringtitle,Stringpress,…){this.title=title;this.press=press;…}}7.2.9this關(guān)鍵字的用途【例7-11】在項(xiàng)目中創(chuàng)787.2.9this關(guān)鍵字的用途2)使用this來(lái)引用構(gòu)造方法如果類中定義了多個(gè)構(gòu)造方法,可以使用this來(lái)進(jìn)行簡(jiǎn)化。7.2.9this關(guān)鍵字的用途2)使用this來(lái)引用構(gòu)造797.2.9this關(guān)鍵字的用途publicclassBook{…//定義成員變量

publicBook(){

this(null,null,null,0);//使用this調(diào)用另一構(gòu)造方法

}publicBook(Stringtitle,Stringpress,…){this.title=title;this.press=press;…}}【例7-12】在項(xiàng)目中創(chuàng)建Book類,定義多個(gè)構(gòu)造方法來(lái)初始化其狀態(tài)。7.2.9this關(guān)鍵字的用途publicclass807.2.10static關(guān)鍵字的用途前面的章節(jié)介紹了如何創(chuàng)建成員變量和成員方法。它們都需要先創(chuàng)建對(duì)象才能夠使用。對(duì)于不同的對(duì)象,成員變量可以具有不同的狀態(tài),而且彼此不會(huì)受到影響。如果需要直接使用成員變量和成員方法而不創(chuàng)建對(duì)象,則可以使用static關(guān)鍵字。它表明被修飾的成員是屬于這個(gè)類的,而不是某個(gè)特定的對(duì)象。由static修飾的變量、常量和方法被稱作靜態(tài)變量、常量和方法。7.2.10static關(guān)鍵字的用途前面的章節(jié)介紹了如何817.2.10static關(guān)鍵字的用途1)靜態(tài)成員變量static關(guān)鍵字應(yīng)放在變量類型前。在類的內(nèi)部使用static變量時(shí)直接使用變量名即可。在類的外部使用static變量可以使用“類名.靜態(tài)變量名”的方式。注意:雖然靜態(tài)成員也可以使用“對(duì)象.靜態(tài)成員”的形式進(jìn)行調(diào)用,但這樣的形式通常不被鼓勵(lì)使用因?yàn)檫@樣容易混淆靜態(tài)成員和非靜態(tài)成員。7.2.10static關(guān)鍵字的用途1)靜態(tài)成員變量注827.2.10static關(guān)鍵字的用途靜態(tài)成員變量的初始化:靜態(tài)變量只被初始化一次。在聲明的同時(shí)賦予相應(yīng)的初始值。利用靜態(tài)初始化塊對(duì)靜態(tài)成員變量進(jìn)行初始化。靜態(tài)成員變量不能在構(gòu)造方法中初始化。因?yàn)闃?gòu)造方法只有在對(duì)象時(shí)才被調(diào)用,而靜態(tài)變量在沒(méi)有創(chuàng)建對(duì)象之前就已經(jīng)存在,并且可以被引用。7.2.10static關(guān)鍵字的用途靜態(tài)成員變量的初始化837.2.10static關(guān)鍵字的用途【例7-13】在項(xiàng)目中創(chuàng)建StaticVariable類,定義一個(gè)靜態(tài)變量來(lái)保存該類被實(shí)例化次數(shù)。public

classStaticVariable{

private

static

int

count;

publicStaticVariable(){count++;}public

static

voidmain(String[]args){StaticVariablesv1=newStaticVariable();StaticVariablesv2=newStaticVariable();StaticVariablesv3=newStaticVariable();System.out.println(count);}}7.2.10static關(guān)鍵字的用途【例7-13】在項(xiàng)847.2.10static關(guān)鍵字的用途2)靜態(tài)成員方法靜態(tài)成員方法主要是用來(lái)操作靜態(tài)成員變量static關(guān)鍵字應(yīng)放在返回值類型前。在類的內(nèi)部調(diào)用static方法時(shí)直接使用方法名即可。在類的外部調(diào)用static方法可以使用“類名.靜態(tài)方法名()”的方式。7.2.10static關(guān)鍵字的用途2)靜態(tài)成員方法857.2.10static關(guān)鍵字的用途在Java語(yǔ)言中對(duì)靜態(tài)方法有以下兩點(diǎn)規(guī)定。在靜態(tài)方法中不可以使用this關(guān)鍵字在靜態(tài)方法中不可以直接調(diào)用非靜態(tài)方法注意:在Java中規(guī)定不能將方法體內(nèi)的局部變量聲明為static的。也不能在靜態(tài)上下文和靜態(tài)代碼塊中使用this關(guān)鍵字。7.2.10static關(guān)鍵字的用途在Java語(yǔ)言中對(duì)靜867.2.10static關(guān)鍵字的用途【例7-14】在項(xiàng)目中創(chuàng)建StaticMethods類,定義一個(gè)靜態(tài)方法來(lái)計(jì)算給定數(shù)字的平方數(shù)。public

classStaticMethods{

private

static

doublepower(doublenumber){

returnnumber*number;}

public

static

voidmain(String[]args){System.out.println(power(10.5));

}}7.2.10static關(guān)鍵字的用途【例7-14】在項(xiàng)87publicclassmyapp{staticinti=47;publicvoidcall(){System.out.println("i的值為"+i);

}publicstaticvoidmain(String[]args){myappt1=newmyapp();myappt2=newmyapp();t2.i=60;System.out.println("對(duì)象1:"

+t1.i);t1.call();System.out.println("對(duì)象2:"

+t2.i);t2.call();System.out.println("靜態(tài)對(duì)象i:"+myapp.i);

}}對(duì)象1:60i的值為60對(duì)象2:60i的值為60靜態(tài)對(duì)象i:60publicclassmyapp{對(duì)象1:60887.2.11final關(guān)鍵字的用途final關(guān)鍵字的含義是不可變,可以用來(lái)修飾類、成員變量和成員方法。如果修飾類,則表示該類不能夠被繼承。如果修飾成員變量,則表示該變量一旦被賦值之后就不能修改。如果修飾成員方法,則表示該方法不能夠被子類重寫。final關(guān)鍵字的一個(gè)常見用法是與static關(guān)鍵字組合來(lái)創(chuàng)建常量,例如:publicstaticfinalPI=3.1415926;

7.2.11final關(guān)鍵字的用途final關(guān)鍵字的含義897.2.11final關(guān)鍵字的用途【例7-15】創(chuàng)建FinalTest類,在main()方法中將final類型的成員變量進(jìn)行賦值。publicclassFinalTest{

privatefinalintnumber=2;

//聲明final修飾的成員變量

publicstaticvoidmain(String[]args){

newFinalTest().number=5;

//對(duì)成員變量進(jìn)行賦值

}}7.2.11final關(guān)鍵字的用途【例7-15】創(chuàng)建F907.2.12包的定義與使用包是Java中管理源代碼文件的方式。在前面內(nèi)容中,編寫的Java文件都使用了默認(rèn)的包空間。隨著文件個(gè)數(shù)不斷的增加,肯定增加了文件命名的難度,也不便于文件的管理。通過(guò)使用包,可以具有如下優(yōu)勢(shì):1)便于區(qū)分哪些類是相關(guān)的2)在不同的包中,可以存在相同名稱的類3)可以使用包來(lái)控制訪問(wèn)權(quán)限7.2.12包的定義與使用包是Java中管理源代碼文件的917.2.12包的定義與使用聲明包的語(yǔ)法如下:packagecom.mingrisoft;注意:使用package聲明包時(shí),該語(yǔ)句必須放在源代碼的第一行。前面可以存在注釋代碼,但是不能有類定義等代碼。7.2.12包的定義與使用聲明包的語(yǔ)法如下:927.2.12包的定義與使用除了java.lang包中的類,其他的工具類需要導(dǎo)入其所在的包才能夠使用。有2種導(dǎo)入類的方式:1)使用import語(yǔ)句導(dǎo)入需要使用的類importjava.util.Date;2)在使用工具類的地方進(jìn)行導(dǎo)入java.util.Datedate=newjava.util.Date();7.2.12包的定義與使用除了java.lang包中的類937.2.12包的定義與使用如果需要使用一個(gè)包中的多個(gè)類,可以使用*來(lái)進(jìn)行整體導(dǎo)入,例如:importjava.util.*;這樣就可以使用java.util包中的任何類了。注意:使用*僅能導(dǎo)入包中的類,不能導(dǎo)入包的子包中的類。讀者可以將其理解為導(dǎo)入一個(gè)文件夾中的文件,但不包括這個(gè)文件夾的子文件夾中的文件。7.2.12包的定義與使用如果需要使用一個(gè)包中的多個(gè)類,947.3注釋7.3.1預(yù)定義注釋7.3.2自定義注釋7.3注釋7.3.1預(yù)定義注釋957.3.1預(yù)定義注釋常用的預(yù)定義注解包括@Deprecated、@Override和@SuppressWarnings三種。@Deprecated注解用于標(biāo)示棄用的類或者方法等,它們應(yīng)該不再使用。@Override注解通常用于修飾重寫的方法,如果開發(fā)人員并沒(méi)有遵守重寫的規(guī)則,則會(huì)給出提示。@SuppressWarnings注解用于壓制警告信息,例如沒(méi)有指明泛型的類型。7.3.1預(yù)定義注釋常用的預(yù)定義注解包括@Depreca967.3.2自定義注釋在進(jìn)行項(xiàng)目開發(fā)時(shí),通常在類的開始部分統(tǒng)一增加注解信息。這些信息包括代碼的作者、文件創(chuàng)建時(shí)間、最后修改時(shí)間和版本信息等。如果使用注解,可以對(duì)它們進(jìn)行統(tǒng)一定義。說(shuō)明:在定義注解時(shí),需要使用大括號(hào)包含注解的內(nèi)容。在使用注解時(shí),需要使用小括號(hào)來(lái)包含注解的內(nèi)容。7.3.2自定義注釋在進(jìn)行項(xiàng)目開發(fā)時(shí),通常在類的開始部分97補(bǔ)充:包裝類Integer類Integer類在對(duì)象中包裝了一個(gè)基本類型int的值。設(shè)計(jì)的初衷是為了在基本類型int和引用類型之間建立一座橋梁。補(bǔ)充:包裝類Integer類Integer類在對(duì)象中包裝了一98補(bǔ)充:包裝類Integer類方法名作用toBinaryString(inti)返回指定數(shù)字i的二進(jìn)制表示形式toOctalString(inti)返回指定數(shù)字i的八進(jìn)制表示形式parseInt(Strings)返回包含在由str指定的字符串中的數(shù)字的等價(jià)整數(shù)值intValue()以int型返回此Integer對(duì)象valueOf(Stringstr)返回保存指定的String的值Integer對(duì)象t

溫馨提示

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