![Java程序設(shè)計(jì)實(shí)用教程-第4章-類-與-對-象課件_第1頁](http://file4.renrendoc.com/view/4fa2efc049a421f796a4faa8f0c6efe9/4fa2efc049a421f796a4faa8f0c6efe91.gif)
![Java程序設(shè)計(jì)實(shí)用教程-第4章-類-與-對-象課件_第2頁](http://file4.renrendoc.com/view/4fa2efc049a421f796a4faa8f0c6efe9/4fa2efc049a421f796a4faa8f0c6efe92.gif)
![Java程序設(shè)計(jì)實(shí)用教程-第4章-類-與-對-象課件_第3頁](http://file4.renrendoc.com/view/4fa2efc049a421f796a4faa8f0c6efe9/4fa2efc049a421f796a4faa8f0c6efe93.gif)
![Java程序設(shè)計(jì)實(shí)用教程-第4章-類-與-對-象課件_第4頁](http://file4.renrendoc.com/view/4fa2efc049a421f796a4faa8f0c6efe9/4fa2efc049a421f796a4faa8f0c6efe94.gif)
![Java程序設(shè)計(jì)實(shí)用教程-第4章-類-與-對-象課件_第5頁](http://file4.renrendoc.com/view/4fa2efc049a421f796a4faa8f0c6efe9/4fa2efc049a421f796a4faa8f0c6efe95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
注意:開始用功了!1注意:開始用功了!11《Java程序設(shè)計(jì)實(shí)用教程》第4章配合例子源代碼一起使用Powerpoint制作:耿祥義張躍平類與對象2《Java程序設(shè)計(jì)實(shí)用教程》第4章配合例子源代碼一起使用P2導(dǎo)讀面向?qū)ο缶幊讨饕w現(xiàn)下列三個(gè)特性。
封裝性
繼承
多態(tài)3導(dǎo)讀面向?qū)ο缶幊讨饕w現(xiàn)下列三個(gè)特性。33§4.1從抽象到類
抽象的關(guān)鍵是抓住事物的兩個(gè)方面:屬性和功能。抽象的目的是從具體的實(shí)例中抽取共有屬性和功能形成一種數(shù)據(jù)類型。
4§4.1從抽象到類抽象的關(guān)鍵是抓住事物4§4.2類類是組成Java程序的基本要素。類封裝了一類對象的狀態(tài)和方法。類是用來定義對象的模板。類的實(shí)現(xiàn)包括兩部分:類聲明和類體?;靖袷綖椋篶lass類名{
類體的內(nèi)容}5§4.2類類是組成Java程序的基本要素。類封裝5§4.2.1類聲明
◆類聲明:class類名例如:classVehicle{ ……}
其中的“classVehicle”稱作類聲明;“Vehicle”是類名。
◆給類命名時(shí),遵守下列編程風(fēng)格(這不是語法要求的,但應(yīng)當(dāng)遵守):1.如果類名使用拉丁字母,那么名字的首字母使用大寫字母,如。2.類名最好容易識別、見名知意。當(dāng)類名由幾個(gè)“單詞”復(fù)合而成時(shí),每個(gè)單詞的首字母使用大寫。
6§4.2.1類聲明◆類聲明:class類名66§4.2.2類體
◆類聲明之后的一對大括號“{”,“}”以及它們之間的內(nèi)容稱作類體,大括號之間的內(nèi)容稱作類體的內(nèi)容。
◆類體的內(nèi)容由兩部分構(gòu):一部分是變量的聲明,用來刻畫屬性;另一部分是方法的定義,用來刻畫功能。
7§4.2.2類體
◆類聲明之后的一對大括號“{”,7例4-1Vehicle.java
8例4-1Vehicle.java88§4.2.3成員變量
類體分為兩部分:一部分是變量的聲明,另一部分是方法的定義。變量聲明部分所聲明的變量被稱做域變量或成員變量。2.成員變量的有效范圍:成員變量在整個(gè)類內(nèi)都有效,其有效性與它在類體中書寫的先后位置無關(guān)。
3.編程風(fēng)格(1)一行只聲明一個(gè)變量。(2)變量的名字符合標(biāo)識符規(guī)定。(3)變量名字見名知意,避免容易混淆的變量名字。1.成員變量的類型:成員變量的類型可以是Java中的任何一種數(shù)據(jù)類型,包括基本類型:整型、浮點(diǎn)型、字符型;引用類型:數(shù)組、對象和接口。9§4.2.3成員變量
類體分為兩部9§4.2.4方法_1.方法聲明
方法的定義包括兩部分:方法聲明和方法體。一般格式為:
方法聲明部分{方法體的內(nèi)容}
1.方法聲明方法聲明包括方法名和方法的返回類型,如:
doublegetSpeed(){returnspeed;}
注:方法的返回類型、方法的參數(shù)、方法的名字
10§4.2.4方法_1.方法聲明
方法10§4.2.4方法_2.方法體
2.方法體
方法聲明之后的一對大括號“{”,“}”以及之間的內(nèi)容稱作方法的方法體。方法體的內(nèi)容包括局部變量的聲明和Java語句。在方法體中聲明的變量和方法的參數(shù)被稱作局部變量。局部變量只在聲明它的方法內(nèi)有效,而且與其聲明的位置有關(guān)。方法的參數(shù)在整個(gè)方法內(nèi)有效,方法內(nèi)的局部變量從聲明它的位置之后開始有效。如果局部變量的聲明是在一個(gè)復(fù)合語句中,那么該局部變量的有效范圍是該復(fù)合語。11§4.2.4方法_2.方法體
2.方法體1111§4.2.4方法_3.區(qū)分成員變量和局部變量
3.區(qū)分成員變量和局部變量
如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即這個(gè)成員變量在這個(gè)方法內(nèi)暫時(shí)失效。如果想在該方法中使用被隱藏的成員變量,必須使用關(guān)鍵字this。12§4.2.4方法_3.區(qū)分成員變量和局部變量
12§4.2.5需要注意的問題
類體的內(nèi)容由兩部分構(gòu)成:一部分是變量的聲明,另一部分是方法的定義。
對成員變量的操作只能放在方法中,方法可以對成員變量和該方法體中聲明的局部變量進(jìn)行操作。在聲明成員變量時(shí)可以同時(shí)賦予初值,但是不可以在類體中有單獨(dú)的賦值語句(不可以有變量的聲明和方法的定義以外的其它語句)。
13§4.2.5需要注意的問題
類體的內(nèi)容由兩部13§4.2.6類的UML圖
UML(UnifiedModelingLanguageDiagram)圖屬于結(jié)構(gòu)圖,常被用于描述一個(gè)系統(tǒng)的靜態(tài)結(jié)構(gòu)。一個(gè)UML中通常包含有類(Class)的UML圖,接口(Interface)的UML圖以及泛化關(guān)系(Generalization)的UML圖、關(guān)聯(lián)關(guān)系(Association)的UML圖、依賴關(guān)系(Dependency)的UML圖和實(shí)現(xiàn)關(guān)系(Realization)的UML圖。在類的UML圖中,使用一個(gè)長方形描述一個(gè)類的主要構(gòu)成,將長方形垂直地分為三層。第1層是名字層;第2層是變量層,也稱屬性層;第3層是方法層,也稱操作層。14§4.2.6類的UML圖
UML(Unifi14圖4.1Vehicle類的UML圖
Vehicle.java
publicclassVehicle{doublespeed;intpower;
voidspeedUp(ints){
speed=speed+s;}voidspeedDown(intd){
speed=speed-d;}voidsetPower(intp){power=p;}intgetPower(){returnpower;}doublegetSpeed(){returnspeed;}}15圖4.1Vehicle類的UML圖Vehicle15§4.3構(gòu)造方法與對象的創(chuàng)建
類是面向?qū)ο笳Z言中最重用的一種數(shù)據(jù)類型,那么就可以用它來聲明變量。在面向?qū)ο笳Z言中,用類聲明的變量被稱作對象。和基本數(shù)據(jù)類型不同,在用類聲明對象后,還必須要創(chuàng)建對象,即為聲明的對象分配變量(確定對象所具有的屬性),當(dāng)使用一個(gè)類創(chuàng)建一個(gè)對象時(shí),也稱給出了這個(gè)類的一個(gè)實(shí)例。通俗的講,類是創(chuàng)建對象的“模板”,沒有類就沒有對象。構(gòu)造方法和對象的創(chuàng)建密切相關(guān)。16§4.3構(gòu)造方法與對象的創(chuàng)建類是面向?qū)ο笳Z言16§4.3.1構(gòu)造方法
構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型。允許一個(gè)類中編寫若干個(gè)構(gòu)造方法,但必須保證他們的參數(shù)不同,即參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。
需要注意的是(1)如果類中沒有編寫構(gòu)造方法,系統(tǒng)會默認(rèn)該類只有一個(gè)構(gòu)造方法,該默認(rèn)的構(gòu)造方法是無參數(shù)的,且方法體中沒有語句。(2)如果類里定義了一個(gè)或多個(gè)構(gòu)造方法,那么Java不提供默認(rèn)的構(gòu)造方法。17§4.3.1構(gòu)造方法構(gòu)造方法是一種特殊方法17§4.3.2創(chuàng)建對象1,21.對象的聲明一般格式為:類的名字
對象名字;如:
Vehiclecar;
這里Vehicle是一個(gè)類的名字,car是我們聲明的對象的名字。2.為聲明的對象分配內(nèi)存使用new運(yùn)算符和類的構(gòu)造方法為聲明的對象分配變量,即創(chuàng)建對象。如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認(rèn)的構(gòu)造方法,默認(rèn)的構(gòu)造方法是無參數(shù)的,且方法體中沒有語句。如:
car=newVehiclee();18§4.3.2創(chuàng)建對象1,21.對象的聲明1818例4-2Example4_2.java
,Vehicle.java
19例4-2Example4_2.java,Vehicle.19§4.3.2創(chuàng)建對象3,43.對象的內(nèi)存模型(1)聲明對象時(shí)的內(nèi)存模型
Vehiclecar1;(2)對象分配內(nèi)存后的內(nèi)存模型
car1=newVehicle();
4.創(chuàng)建多個(gè)不同的對象
20§4.3.2創(chuàng)建對象3,43.對象的內(nèi)存模型(2)20§4.3.3使用對象
對象不僅可以操作自己的變量改變狀態(tài),而且能調(diào)用類中的方法產(chǎn)生一定的行為。通過使用運(yùn)算符“.”,對象可以實(shí)現(xiàn)對自己變量的訪問和方法的調(diào)用。1.對象操作自己的變量(對象的屬性)對象.變量;
2.對象調(diào)用類中的方法(對象的功能)
對象.方法;
3.體現(xiàn)封裝
當(dāng)對象調(diào)用方法時(shí),方法中出現(xiàn)的成員變量就是指分配給該對象的變量。
21§4.3.3使用對象
對象不僅可以操作自己的21圖4.6對象體現(xiàn)封裝
代碼:car1.setPower(128);car2.setPower(76);car1.speedUp(80);car2.speedUp(100);22圖4.6對象體現(xiàn)封裝代碼:2222§4.3.4對象的引用和實(shí)體
類是體現(xiàn)封裝的一種數(shù)據(jù)類型,類聲明的變量稱做對象,對象中負(fù)責(zé)存放引用,以確保對象可以操作分配給該對象的變量以及調(diào)用類中的方法。分配給對象的變量習(xí)慣地稱做對象的實(shí)體。
1.避免使用空對象沒有實(shí)體的對象稱作空對象,空對象不能使用,即不能讓一個(gè)空對象去調(diào)用方法產(chǎn)生行為。2.垃圾收集一個(gè)類聲明的兩個(gè)對象如果具有相同的引用,那么二者就具有完全相同的實(shí)體,而且Java有所謂“垃圾收集”機(jī)制,這種機(jī)制周期地檢測某個(gè)實(shí)體是否已不再被任何對象所擁有(引用),如果發(fā)現(xiàn)這樣的實(shí)體,就釋放實(shí)體占有的內(nèi)存。
23§4.3.4對象的引用和實(shí)體類是體現(xiàn)23圖4.7,圖4.8代碼:VehiclecarOne=newVehicle();VehiclecarTwo=newVehicle);
carOne.speedUp(60);carTwo.speedUp(90);代碼:carOne=carTwo
24圖4.7,圖4.8代碼:代碼:2424例4-3Example4_3.java
,Vehicle.java
25例4-3Example4_3.java,Vehicle.25§4.4參數(shù)傳值
方法中最重要的部分之一就是方法的參數(shù),參數(shù)屬于局部變量,當(dāng)對象調(diào)用方法時(shí),參數(shù)被分配內(nèi)存空間,并要求調(diào)用者向參數(shù)專遞值,即方法被調(diào)用時(shí),參數(shù)變量必須有具體的值。26§4.4參數(shù)傳值方法中最重要的部分之一就是26§4.4.1傳值機(jī)制
在Java中,方法的所有參數(shù)都是“傳值”的,也就是說,方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。例如,如果向方法的int型參數(shù)x傳遞一個(gè)int值,那么參數(shù)x得到的值是傳遞的值的拷貝。27§4.4.1傳值機(jī)制
在Java中,方27§4.4.2基本數(shù)據(jù)類型參數(shù)的傳值
對于基本數(shù)據(jù)類型的參數(shù),向該參數(shù)傳遞的值的級別不可以高于該參數(shù)的級別。28§4.4.2基本數(shù)據(jù)類型參數(shù)的傳值對于基本數(shù)28例4-4Circle.java,Example4_4.java
29例4-4Circle.java,Example4_4.ja29§4.4.3引用類型參數(shù)的傳值
當(dāng)參數(shù)是引用類型時(shí),“傳值”傳遞的是變量中存放的“引用”,而不是變量所引用的實(shí)體。30§4.4.3引用類型參數(shù)的傳值當(dāng)參數(shù)是引用類30例4-5TV.java,Chineses.java
,Example4_5.java
31例4-5TV.java,Chineses.java,E31§4.4.4可變參數(shù)
可變參數(shù)是指在聲明方法時(shí)不給出參數(shù)列表中從某項(xiàng)直至最后一項(xiàng)參數(shù)的名字和個(gè)數(shù),但這些參數(shù)的類型必須相同。可變參數(shù)使用“…”表示若干個(gè)參數(shù),這些參數(shù)的類型必須相同,最后一個(gè)參數(shù)必須是參數(shù)列表中的最后一個(gè)參數(shù)。例如:
publicvoidf(int…x)那么,方法f的參數(shù)列表中,從第1個(gè)至最后一個(gè)參數(shù)都是int型,但連續(xù)出現(xiàn)的int型參數(shù)的個(gè)數(shù)不確定。稱x是方法f的參數(shù)列表中的可變參數(shù)的“參數(shù)代表”。
參數(shù)代表可以通過下標(biāo)運(yùn)算來表示參數(shù)列表中的具體參數(shù),即x[0],x[1]…x[m]分別表示x代表的第1個(gè)至第m個(gè)參數(shù)。
32§4.4.4可變參數(shù)可變參數(shù)是指在聲明方法時(shí)不32例4-6Computer.java,Example4_6.java
33例4-6Computer.java,Example4_6.33§4.5有理數(shù)的類封裝例4-7有理數(shù)有兩個(gè)重要的成員:分子和分母,另外還有重要的四則運(yùn)算。例4-7Rational.java,Example4_7.java34§4.5有理數(shù)的類封裝例4-7有理數(shù)有兩個(gè)重要34§4.6對象的組合
一個(gè)類的成員變量可以是Java允許的任何數(shù)據(jù)類型,因此,一個(gè)類可以把對象作為自己的成員變量,如果用這樣的類創(chuàng)建對象,那么該對象中就會有其他對象,也就是說該對象將其他對象作為自己的組成部分。35§4.6對象的組合一個(gè)類的成員變量可以是Java允35§4.6.1圓錐體
例4-8例4-8
Circle.java,Circular.java,Example4_8.java36§4.6.1圓錐體
例4-8例4-83636§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖_1.關(guān)聯(lián)關(guān)系1.關(guān)聯(lián)關(guān)系如果A類中成員變量是用B類聲明的對象,那么A和B的關(guān)系是關(guān)聯(lián)關(guān)系,稱A關(guān)聯(lián)于B或A組合了B。圖4.16所示為例4-8中Circular類關(guān)聯(lián)于Circle類的UML圖。
37§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖_1.關(guān)聯(lián)關(guān)系37§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖_2.依賴關(guān)系
2.依賴關(guān)系
如果A類中某個(gè)方法的參數(shù)是用B類聲明的對象或某個(gè)方法返回的數(shù)據(jù)類型是B類對象,那么A和B的關(guān)系是依賴關(guān)系,稱A依賴于B。圖4.17所示為ClassRoom依賴于Student的UML圖。
38§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖_2.依賴關(guān)系38§4.7實(shí)例成員與類成員
§4.7.1實(shí)例變量和類變量的聲明
在聲明成員變量時(shí),用關(guān)鍵字static給予修飾的稱作類變量,否則稱作實(shí)例變量(類變量也稱為static變量,靜態(tài)變量)。classDog{floatx;//實(shí)例變量
staticinty;//類變量}
39§4.7實(shí)例成員與類成員在聲明成員變量39§4.7.2實(shí)例變量和類變量的區(qū)別
1.不同對象的實(shí)例變量互不相同
2.所有對象共享類變量
3.通過類名直接訪問類變量
例4-9Lader.java,Example4_9.java40§4.7.2實(shí)例變量和類變量的區(qū)別1.不同對象的實(shí)例40§4.7.3實(shí)例方法和類方法的定義
類中的方法也可分為實(shí)例方法和類方法。方法聲明時(shí),方法類型前面不加關(guān)鍵字static修飾的是實(shí)例方法、加static關(guān)鍵字修飾的是類方法(靜態(tài)方法)。classA{inta;floatmax(floatx,floaty){//實(shí)例方法…}
staticfloatjerry(){//類方法…}
staticvoidspeak(Strings){//類方法…}}41§4.7.3實(shí)例方法和類方法的定義類中的方法41§4.7.4實(shí)例方法和類方法的區(qū)別1.對象調(diào)用實(shí)例方法當(dāng)對象調(diào)用實(shí)例方法時(shí),該方法中出現(xiàn)的實(shí)例變量就是分配給該對象的實(shí)例變量;該方法中出現(xiàn)的類變量也是分配給該對象的變量,只不過這個(gè)變量和所有的其他對象共享而已。2.類名調(diào)用類方法類方法不僅可以被類創(chuàng)建的任何對象調(diào)用執(zhí)行,也可以直接通過類名調(diào)用。和實(shí)例方法不同的是,類方法不可以操作實(shí)例變量,這是因?yàn)樵陬悇?chuàng)建對象之前,實(shí)例成員變量還沒有分配內(nèi)存。例子4-10Example4_10.java
42§4.7.4實(shí)例方法和類方法的區(qū)別1.對象調(diào)用實(shí)例方42§4.8方法重載與多態(tài)方法重載的意思是:一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。例4-11
Tixing.java,
People.java,Circle.java,Example4_11.java
classA{floatadd(inta,intb){returna+b;}floatadd(longa,intb){returna+b;}doubleadd(doublea,intb){returna+b;}}43§4.8方法重載與多態(tài)方法重載的意思是:一個(gè)類中可43§4.9this關(guān)鍵字this是Java的一個(gè)關(guān)鍵字,表示某個(gè)對象。this可以出現(xiàn)在實(shí)例方法和構(gòu)造方法中,但不可以出現(xiàn)在類方法中。實(shí)例方法可以操作類的成員變量,當(dāng)實(shí)例成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是:this.成員變量;當(dāng)static成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是:類名.成員變量;
當(dāng)一個(gè)對象調(diào)用方法時(shí),方法中的實(shí)例成員變量就是指分配給該對象的實(shí)例成員變量,而static變量則和其他對象共享。因此,通常情況下,可以省略實(shí)例成員變量名字前面的“this.”,以及static變量前面的“類名.”。
但是,當(dāng)實(shí)例成員變量的名字和局部變量的名字相同時(shí),成員變量前面的“this.”或“類名.”就不可以省略。
注:this不能出現(xiàn)在類方法中,這是因?yàn)?,類方法可以通過類名直接調(diào)用,這時(shí),可能還沒有任何對象誕生。44§4.9this關(guān)鍵字this是Java的一個(gè)關(guān)鍵44§4.10包包是Java語言中有效地管理類的一個(gè)機(jī)制。包名的目的是有效的區(qū)分名字相同的類。不同Java源文件中兩個(gè)類名字相同時(shí),它們可以通過隸屬不同的包來相互區(qū)分。45§4.10包包是Java語言中有效地管理類的一個(gè)機(jī)制45§4.10.1包語句
通過關(guān)鍵字package聲明包語句。
package語句作為Java源文件的第一條語句,為該源文件中聲明的類指定包名。package語句的一般格式為:
package包名;
例如:
packagesunrise;package;
46§4.10.1包語句通過關(guān)鍵字pack46§4.10.2有包名的類的存儲目錄
如果一個(gè)類有包名,那么就不能在任意位置存放它,否則虛擬機(jī)將無法加載這樣的類。
程序如果使用了包語句,例如:packagetom.jiafei;那么存儲文件的目錄結(jié)構(gòu)中必須包含有如下的結(jié)構(gòu)
…\tom\jiafei
如:c:\1000\tom\jiafei并且要將源文件編譯得到的類的字節(jié)碼文件保存在目錄c:\1000\tom\jiafei中(源文件可以任意存放)。47§4.10.2有包名的類的存儲目錄如果一47§4.10.3運(yùn)行有包名的主類如果主類的包名是tom.jiafei,那么主類的字節(jié)碼一定存放在…\tom\jiefei目錄中,運(yùn)行時(shí)必須到tom\jiefei的上一層(即tom的父目錄)目錄中去運(yùn)行主類。假設(shè)tom\jiefei的上一層目錄是1000,那么,必須如下格式來運(yùn)行:C:\1000\javatom.jiafei.主類名
注:主類名是:“包名.主類名”例4-12
Student.java,
Example4_12.java
48§4.10.3運(yùn)行有包名的主類如果主類48§4.11import語句一個(gè)類可能需要另一個(gè)類聲明的對象作為自己的成員或方法中的局部變量,如果這兩個(gè)類在同一個(gè)包中,當(dāng)然沒有問題。如果一個(gè)類想要使用的那個(gè)類和它不在一個(gè)包中,要使用import語句完成使命。49§4.11import語句一個(gè)類可能需要49§4.11.1引入類庫中的類
如果用戶需要類庫中的類就必須使用import語句,如:
importjava.util.Date;例4-13Example4_13.java
50§4.11.1引入類庫中的類如果用戶需要類庫中的50§4.11.2引入自定義包中的類
用戶程序可以使用tom.jiafei包中的類如:importtom.jiafei.*;使用非類庫中有包名的類,也要使用import語句。例4-14Triangle.java
例4-15Example4_15.java
51§4.11.2引入自定義包中的類用戶程序可51§4.11.3使用無包名的類
之前,我們在源文件中一直沒有使用包語句,因此各個(gè)源文件得到的類都沒有包名。如果一個(gè)源文件中的類想使用無名包中的類,只要將這個(gè)無包名的類的字節(jié)碼和當(dāng)前類保存在同一目錄中即可。
例4-16A.java
,Example4_16.java
52§4.11.3使用無包名的類之前,我們52§4.11.4避免類名混淆1.區(qū)分無包名和有包名的類如果一個(gè)源文件使用了一個(gè)無名包中的A類,同時(shí)又用import語句引入了某個(gè)有包名的同名的類,如tom.jiafei中的A類,就可能引起類名的混淆。2.區(qū)分有包名的類如果一個(gè)源文件引入了兩個(gè)包中同名的類,那么在使用該類時(shí),不允許省略包名。53§4.11.4避免類名混淆1.區(qū)分無包名和有包名的53§4.12訪問權(quán)限當(dāng)用一個(gè)類創(chuàng)建了一個(gè)對象之后,該對象可以通過“.”運(yùn)算符操作自己的變量、使用類中的方法,但對象操作自己的變量和使用類中的方法是有一定限制的。
54§4.12訪問權(quán)限當(dāng)用一個(gè)類創(chuàng)建了一個(gè)對54§4.12.1何謂訪問權(quán)限
所謂訪問權(quán)限是指對象是否可以通過“.”運(yùn)算符操作自己的變量或通過“.”運(yùn)算符使用類中的方法。
訪問限制修飾符有private、protected和public,都是Java的關(guān)鍵字,用來修飾成員變量或方法。55§4.12.1何謂訪問權(quán)限所謂訪問權(quán)限55§4.12.2私有變量和私有方法用關(guān)鍵字private修飾的成員變量和方法稱為私有變量和私有方法。
對于私有成員變量或方法,只有在本類中創(chuàng)建該類的對象時(shí),這個(gè)對象才能訪問自己的私有成員變量和類中的私有方法。例4-17Yuan.java
,Example4_17.java
classTom{privatefloatweight;
privatefloatf(floata,floatb){
returna+b;}}classJerry{voidg(){Tomcat=newTom();cat.weight=23f;//非法
floatsum=cat.f(3,4);//非法}}56§4.12.2私有變量和私有方法用關(guān)鍵字pri56§4.12.3共有變量和共有方法
用public修飾的成員變量和方法被稱為共有變量和共有方法
。
我們在任何一個(gè)類中用類Tom創(chuàng)建了一個(gè)對象后,該對象能訪問自己的public變量和類中的public方法(也可以通過類名來操作成員變量、方法)。classTom{publicfloatweight;publicfloatf(floata,floatb){returna+b;}}classJerry{voidg(){Tomcat=newTom();cat.weight=23f;//合法
floatsum=cat.f(3,4);//合法}}57§4.12.3共有變量和共有方法用public57§4.12.4友好變量和友好方法
當(dāng)在另外一個(gè)類中用類Tom創(chuàng)建了一個(gè)對象后,如果這個(gè)類與Tom類在同一個(gè)包中,那么該對象能訪問自己的友好變量和友好方法。在任何一個(gè)與Tom同一包中的類中,也可以通過Tom類的類名訪問Tom類的類友好成員變量和類友好方法。classTom{floatweight; floatf(floata,floatb){returna+b;}}classJerry{voidg(){Tomcat=newTom();cat.weight=23f;//合法
floatsum=cat.f(3,4);//合法}}58§4.12.4友好變量和友好方法當(dāng)在另外一個(gè)類58§4.12.5受保護(hù)的成員變量和方法用protected修飾的成員變量和方法被稱為受保護(hù)的成員變量和受保護(hù)的方法。classTom{protectedfloatweight; protectedfloatf(floata,floatb){returna+b;}}classJerry{voidg(){Tomcat=newTom();cat.weight=23f;//合法
floatsum=cat.f(3,4);//合法}}59§4.12.5受保護(hù)的成員變量和方法用pr59§4.12.6public類與友好類類聲明時(shí),如果在關(guān)鍵字class前面加上public關(guān)鍵字,就稱這樣的類是一個(gè)public類。可以在任何另外一個(gè)類中,使用public類創(chuàng)建對象。
如果一個(gè)類不加public修飾,這樣的類被稱作友好類。在另外一個(gè)類中使用友好類創(chuàng)建對象時(shí),要保證它們是在同一包中。60§4.12.6public類與友好類類聲明時(shí),如60§4.13基本類型的類包裝
Java的基本數(shù)據(jù)類型包括:byte、int、short、long、float、double、char。Java提供了基本數(shù)據(jù)類型相關(guān)的類,實(shí)現(xiàn)了對基本數(shù)據(jù)類型的封裝。這些類分別是:Byte、Integer、Short、Long、Float、Double和Character類。這些類在java.lang包中。61§4.13基本類型的類包裝Java的基本數(shù)據(jù)61§4.13.1Double和Float類
Double類和Float類實(shí)現(xiàn)了對double和float基本型數(shù)據(jù)的類包裝。Double類的構(gòu)造方法:Double(doublenum)Float類的構(gòu)造方法:Float(floatnum)Double對象調(diào)用doubleValue()方法可以返回該對象含有的double型數(shù)據(jù)。
Float對象調(diào)用floatValue()方法可以返回該對象含有的float型數(shù)據(jù)。
62§4.13.1Double和Float類62§4.13.2Byte、Short、Integer、Long類上述個(gè)類的構(gòu)造方法分別:
Byte(bytenum)Short(shortnum)Integer(intnum)Long(longnum)Byte、Short、Integer和Long對象分別調(diào)用byteValue()、shortValue()、intValue()和longValue()方法返回該對象含有的基本型數(shù)據(jù)。
63§4.13.2Byte、Short、Integer63§4.13.3Character類
Character類實(shí)現(xiàn)了對char基本型數(shù)據(jù)的類包裝。Character類的構(gòu)造方法:Character(charc)Character類中的一些常用類方法:
publicstaticbooleanisDigit(charch)
如果ch是數(shù)字字符方法返回true,否則返回false。
publicstaticbooleanisLetter(charch)
如果ch是字母方法返回true,否則返回false。
publicstaticbooleanisLetterOrDigit(charch)
如果ch是數(shù)字字符或字母方法返回true,否則返回false。
publicstaticbooleanisLowerCase(charch)
如果ch是小寫字母方法返回true,否則返回false。
publicstaticbooleanisUpperCase(charch)
如果ch是大寫字母方法返回true,否則返回false。
publicstaticchartoLowerCase(charch)
返回ch的小寫形式。
publicstaticchartoUpperCase(charch)
返回ch的大寫形式。
publicstaticbooleanisSpaceChar(charch)
如果ch是空格返回true。64§4.13.3Character類Charac64§4.14反編譯和文檔生成器
§4.14.1javap反編譯
使用JDK提供的反編譯器javap.exe可以將字節(jié)碼反編譯為源碼,查看源碼類中的public方法名字和public成員變量的名字。例如:javapjava.util.Date
將列出Date中的public方法和public成員變量。下列命令
javap–privaejavax.swing.JButton
將列出JButton中的全部方法和成員變量。
65§4.14反編譯和文檔生成器使用JDK提供的反編65§4.14.2javadoc制作文檔
使用JDK提供的javadoc.exe可以制做源文件的html格式文檔。假設(shè)D:\test有源文件Example.java,用javadoc生成Example.java的html格式文擋:
javadocExample.java
這時(shí)在文件夾test中將生成若干個(gè)html文擋,查看這些文檔可以知道源文件中類的組成結(jié)構(gòu),如類中的方法和成員變量。使用javadoc時(shí),也可以使用參數(shù)-d指定生成文擋所在的目錄。例如:javadoc–dC:\documentExample.java66§4.14.2javadoc制作文檔使用66676767注意:開始用功了!68注意:開始用功了!168《Java程序設(shè)計(jì)實(shí)用教程》第4章配合例子源代碼一起使用Powerpoint制作:耿祥義張躍平類與對象69《Java程序設(shè)計(jì)實(shí)用教程》第4章配合例子源代碼一起使用P69導(dǎo)讀面向?qū)ο缶幊讨饕w現(xiàn)下列三個(gè)特性。
封裝性
繼承
多態(tài)70導(dǎo)讀面向?qū)ο缶幊讨饕w現(xiàn)下列三個(gè)特性。370§4.1從抽象到類
抽象的關(guān)鍵是抓住事物的兩個(gè)方面:屬性和功能。抽象的目的是從具體的實(shí)例中抽取共有屬性和功能形成一種數(shù)據(jù)類型。
71§4.1從抽象到類抽象的關(guān)鍵是抓住事物71§4.2類類是組成Java程序的基本要素。類封裝了一類對象的狀態(tài)和方法。類是用來定義對象的模板。類的實(shí)現(xiàn)包括兩部分:類聲明和類體。基本格式為:class類名{
類體的內(nèi)容}72§4.2類類是組成Java程序的基本要素。類封裝72§4.2.1類聲明
◆類聲明:class類名例如:classVehicle{ ……}
其中的“classVehicle”稱作類聲明;“Vehicle”是類名。
◆給類命名時(shí),遵守下列編程風(fēng)格(這不是語法要求的,但應(yīng)當(dāng)遵守):1.如果類名使用拉丁字母,那么名字的首字母使用大寫字母,如。2.類名最好容易識別、見名知意。當(dāng)類名由幾個(gè)“單詞”復(fù)合而成時(shí),每個(gè)單詞的首字母使用大寫。
73§4.2.1類聲明◆類聲明:class類名673§4.2.2類體
◆類聲明之后的一對大括號“{”,“}”以及它們之間的內(nèi)容稱作類體,大括號之間的內(nèi)容稱作類體的內(nèi)容。
◆類體的內(nèi)容由兩部分構(gòu):一部分是變量的聲明,用來刻畫屬性;另一部分是方法的定義,用來刻畫功能。
74§4.2.2類體
◆類聲明之后的一對大括號“{”,74例4-1Vehicle.java
75例4-1Vehicle.java875§4.2.3成員變量
類體分為兩部分:一部分是變量的聲明,另一部分是方法的定義。變量聲明部分所聲明的變量被稱做域變量或成員變量。2.成員變量的有效范圍:成員變量在整個(gè)類內(nèi)都有效,其有效性與它在類體中書寫的先后位置無關(guān)。
3.編程風(fēng)格(1)一行只聲明一個(gè)變量。(2)變量的名字符合標(biāo)識符規(guī)定。(3)變量名字見名知意,避免容易混淆的變量名字。1.成員變量的類型:成員變量的類型可以是Java中的任何一種數(shù)據(jù)類型,包括基本類型:整型、浮點(diǎn)型、字符型;引用類型:數(shù)組、對象和接口。76§4.2.3成員變量
類體分為兩部76§4.2.4方法_1.方法聲明
方法的定義包括兩部分:方法聲明和方法體。一般格式為:
方法聲明部分{方法體的內(nèi)容}
1.方法聲明方法聲明包括方法名和方法的返回類型,如:
doublegetSpeed(){returnspeed;}
注:方法的返回類型、方法的參數(shù)、方法的名字
77§4.2.4方法_1.方法聲明
方法77§4.2.4方法_2.方法體
2.方法體
方法聲明之后的一對大括號“{”,“}”以及之間的內(nèi)容稱作方法的方法體。方法體的內(nèi)容包括局部變量的聲明和Java語句。在方法體中聲明的變量和方法的參數(shù)被稱作局部變量。局部變量只在聲明它的方法內(nèi)有效,而且與其聲明的位置有關(guān)。方法的參數(shù)在整個(gè)方法內(nèi)有效,方法內(nèi)的局部變量從聲明它的位置之后開始有效。如果局部變量的聲明是在一個(gè)復(fù)合語句中,那么該局部變量的有效范圍是該復(fù)合語。78§4.2.4方法_2.方法體
2.方法體1178§4.2.4方法_3.區(qū)分成員變量和局部變量
3.區(qū)分成員變量和局部變量
如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即這個(gè)成員變量在這個(gè)方法內(nèi)暫時(shí)失效。如果想在該方法中使用被隱藏的成員變量,必須使用關(guān)鍵字this。79§4.2.4方法_3.區(qū)分成員變量和局部變量
79§4.2.5需要注意的問題
類體的內(nèi)容由兩部分構(gòu)成:一部分是變量的聲明,另一部分是方法的定義。
對成員變量的操作只能放在方法中,方法可以對成員變量和該方法體中聲明的局部變量進(jìn)行操作。在聲明成員變量時(shí)可以同時(shí)賦予初值,但是不可以在類體中有單獨(dú)的賦值語句(不可以有變量的聲明和方法的定義以外的其它語句)。
80§4.2.5需要注意的問題
類體的內(nèi)容由兩部80§4.2.6類的UML圖
UML(UnifiedModelingLanguageDiagram)圖屬于結(jié)構(gòu)圖,常被用于描述一個(gè)系統(tǒng)的靜態(tài)結(jié)構(gòu)。一個(gè)UML中通常包含有類(Class)的UML圖,接口(Interface)的UML圖以及泛化關(guān)系(Generalization)的UML圖、關(guān)聯(lián)關(guān)系(Association)的UML圖、依賴關(guān)系(Dependency)的UML圖和實(shí)現(xiàn)關(guān)系(Realization)的UML圖。在類的UML圖中,使用一個(gè)長方形描述一個(gè)類的主要構(gòu)成,將長方形垂直地分為三層。第1層是名字層;第2層是變量層,也稱屬性層;第3層是方法層,也稱操作層。81§4.2.6類的UML圖
UML(Unifi81圖4.1Vehicle類的UML圖
Vehicle.java
publicclassVehicle{doublespeed;intpower;
voidspeedUp(ints){
speed=speed+s;}voidspeedDown(intd){
speed=speed-d;}voidsetPower(intp){power=p;}intgetPower(){returnpower;}doublegetSpeed(){returnspeed;}}82圖4.1Vehicle類的UML圖Vehicle82§4.3構(gòu)造方法與對象的創(chuàng)建
類是面向?qū)ο笳Z言中最重用的一種數(shù)據(jù)類型,那么就可以用它來聲明變量。在面向?qū)ο笳Z言中,用類聲明的變量被稱作對象。和基本數(shù)據(jù)類型不同,在用類聲明對象后,還必須要創(chuàng)建對象,即為聲明的對象分配變量(確定對象所具有的屬性),當(dāng)使用一個(gè)類創(chuàng)建一個(gè)對象時(shí),也稱給出了這個(gè)類的一個(gè)實(shí)例。通俗的講,類是創(chuàng)建對象的“模板”,沒有類就沒有對象。構(gòu)造方法和對象的創(chuàng)建密切相關(guān)。83§4.3構(gòu)造方法與對象的創(chuàng)建類是面向?qū)ο笳Z言83§4.3.1構(gòu)造方法
構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型。允許一個(gè)類中編寫若干個(gè)構(gòu)造方法,但必須保證他們的參數(shù)不同,即參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。
需要注意的是(1)如果類中沒有編寫構(gòu)造方法,系統(tǒng)會默認(rèn)該類只有一個(gè)構(gòu)造方法,該默認(rèn)的構(gòu)造方法是無參數(shù)的,且方法體中沒有語句。(2)如果類里定義了一個(gè)或多個(gè)構(gòu)造方法,那么Java不提供默認(rèn)的構(gòu)造方法。84§4.3.1構(gòu)造方法構(gòu)造方法是一種特殊方法84§4.3.2創(chuàng)建對象1,21.對象的聲明一般格式為:類的名字
對象名字;如:
Vehiclecar;
這里Vehicle是一個(gè)類的名字,car是我們聲明的對象的名字。2.為聲明的對象分配內(nèi)存使用new運(yùn)算符和類的構(gòu)造方法為聲明的對象分配變量,即創(chuàng)建對象。如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認(rèn)的構(gòu)造方法,默認(rèn)的構(gòu)造方法是無參數(shù)的,且方法體中沒有語句。如:
car=newVehiclee();85§4.3.2創(chuàng)建對象1,21.對象的聲明1885例4-2Example4_2.java
,Vehicle.java
86例4-2Example4_2.java,Vehicle.86§4.3.2創(chuàng)建對象3,43.對象的內(nèi)存模型(1)聲明對象時(shí)的內(nèi)存模型
Vehiclecar1;(2)對象分配內(nèi)存后的內(nèi)存模型
car1=newVehicle();
4.創(chuàng)建多個(gè)不同的對象
87§4.3.2創(chuàng)建對象3,43.對象的內(nèi)存模型(2)87§4.3.3使用對象
對象不僅可以操作自己的變量改變狀態(tài),而且能調(diào)用類中的方法產(chǎn)生一定的行為。通過使用運(yùn)算符“.”,對象可以實(shí)現(xiàn)對自己變量的訪問和方法的調(diào)用。1.對象操作自己的變量(對象的屬性)對象.變量;
2.對象調(diào)用類中的方法(對象的功能)
對象.方法;
3.體現(xiàn)封裝
當(dāng)對象調(diào)用方法時(shí),方法中出現(xiàn)的成員變量就是指分配給該對象的變量。
88§4.3.3使用對象
對象不僅可以操作自己的88圖4.6對象體現(xiàn)封裝
代碼:car1.setPower(128);car2.setPower(76);car1.speedUp(80);car2.speedUp(100);89圖4.6對象體現(xiàn)封裝代碼:2289§4.3.4對象的引用和實(shí)體
類是體現(xiàn)封裝的一種數(shù)據(jù)類型,類聲明的變量稱做對象,對象中負(fù)責(zé)存放引用,以確保對象可以操作分配給該對象的變量以及調(diào)用類中的方法。分配給對象的變量習(xí)慣地稱做對象的實(shí)體。
1.避免使用空對象沒有實(shí)體的對象稱作空對象,空對象不能使用,即不能讓一個(gè)空對象去調(diào)用方法產(chǎn)生行為。2.垃圾收集一個(gè)類聲明的兩個(gè)對象如果具有相同的引用,那么二者就具有完全相同的實(shí)體,而且Java有所謂“垃圾收集”機(jī)制,這種機(jī)制周期地檢測某個(gè)實(shí)體是否已不再被任何對象所擁有(引用),如果發(fā)現(xiàn)這樣的實(shí)體,就釋放實(shí)體占有的內(nèi)存。
90§4.3.4對象的引用和實(shí)體類是體現(xiàn)90圖4.7,圖4.8代碼:VehiclecarOne=newVehicle();VehiclecarTwo=newVehicle);
carOne.speedUp(60);carTwo.speedUp(90);代碼:carOne=carTwo
91圖4.7,圖4.8代碼:代碼:2491例4-3Example4_3.java
,Vehicle.java
92例4-3Example4_3.java,Vehicle.92§4.4參數(shù)傳值
方法中最重要的部分之一就是方法的參數(shù),參數(shù)屬于局部變量,當(dāng)對象調(diào)用方法時(shí),參數(shù)被分配內(nèi)存空間,并要求調(diào)用者向參數(shù)專遞值,即方法被調(diào)用時(shí),參數(shù)變量必須有具體的值。93§4.4參數(shù)傳值方法中最重要的部分之一就是93§4.4.1傳值機(jī)制
在Java中,方法的所有參數(shù)都是“傳值”的,也就是說,方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。例如,如果向方法的int型參數(shù)x傳遞一個(gè)int值,那么參數(shù)x得到的值是傳遞的值的拷貝。94§4.4.1傳值機(jī)制
在Java中,方94§4.4.2基本數(shù)據(jù)類型參數(shù)的傳值
對于基本數(shù)據(jù)類型的參數(shù),向該參數(shù)傳遞的值的級別不可以高于該參數(shù)的級別。95§4.4.2基本數(shù)據(jù)類型參數(shù)的傳值對于基本數(shù)95例4-4Circle.java,Example4_4.java
96例4-4Circle.java,Example4_4.ja96§4.4.3引用類型參數(shù)的傳值
當(dāng)參數(shù)是引用類型時(shí),“傳值”傳遞的是變量中存放的“引用”,而不是變量所引用的實(shí)體。97§4.4.3引用類型參數(shù)的傳值當(dāng)參數(shù)是引用類97例4-5TV.java,Chineses.java
,Example4_5.java
98例4-5TV.java,Chineses.java,E98§4.4.4可變參數(shù)
可變參數(shù)是指在聲明方法時(shí)不給出參數(shù)列表中從某項(xiàng)直至最后一項(xiàng)參數(shù)的名字和個(gè)數(shù),但這些參數(shù)的類型必須相同。可變參數(shù)使用“…”表示若干個(gè)參數(shù),這些參數(shù)的類型必須相同,最后一個(gè)參數(shù)必須是參數(shù)列表中的最后一個(gè)參數(shù)。例如:
publicvoidf(int…x)那么,方法f的參數(shù)列表中,從第1個(gè)至最后一個(gè)參數(shù)都是int型,但連續(xù)出現(xiàn)的int型參數(shù)的個(gè)數(shù)不確定。稱x是方法f的參數(shù)列表中的可變參數(shù)的“參數(shù)代表”。
參數(shù)代表可以通過下標(biāo)運(yùn)算來表示參數(shù)列表中的具體參數(shù),即x[0],x[1]…x[m]分別表示x代表的第1個(gè)至第m個(gè)參數(shù)。
99§4.4.4可變參數(shù)可變參數(shù)是指在聲明方法時(shí)不99例4-6Computer.java,Example4_6.java
100例4-6Computer.java,Example4_6.100§4.5有理數(shù)的類封裝例4-7有理數(shù)有兩個(gè)重要的成員:分子和分母,另外還有重要的四則運(yùn)算。例4-7Rational.java,Example4_7.java101§4.5有理數(shù)的類封裝例4-7有理數(shù)有兩個(gè)重要101§4.6對象的組合
一個(gè)類的成員變量可以是Java允許的任何數(shù)據(jù)類型,因此,一個(gè)類可以把對象作為自己的成員變量,如果用這樣的類創(chuàng)建對象,那么該對象中就會有其他對象,也就是說該對象將其他對象作為自己的組成部分。102§4.6對象的組合一個(gè)類的成員變量可以是Java允102§4.6.1圓錐體
例4-8例4-8
Circle.java,Circular.java,Example4_8.java103§4.6.1圓錐體
例4-8例4-836103§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖_1.關(guān)聯(lián)關(guān)系1.關(guān)聯(lián)關(guān)系如果A類中成員變量是用B類聲明的對象,那么A和B的關(guān)系是關(guān)聯(lián)關(guān)系,稱A關(guān)聯(lián)于B或A組合了B。圖4.16所示為例4-8中Circular類關(guān)聯(lián)于Circle類的UML圖。
104§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖_1.關(guān)聯(lián)關(guān)系104§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖_2.依賴關(guān)系
2.依賴關(guān)系
如果A類中某個(gè)方法的參數(shù)是用B類聲明的對象或某個(gè)方法返回的數(shù)據(jù)類型是B類對象,那么A和B的關(guān)系是依賴關(guān)系,稱A依賴于B。圖4.17所示為ClassRoom依賴于Student的UML圖。
105§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖_2.依賴關(guān)系105§4.7實(shí)例成員與類成員
§4.7.1實(shí)例變量和類變量的聲明
在聲明成員變量時(shí),用關(guān)鍵字static給予修飾的稱作類變量,否則稱作實(shí)例變量(類變量也稱為static變量,靜態(tài)變量)。classDog{floatx;//實(shí)例變量
staticinty;//類變量}
106§4.7實(shí)例成員與類成員在聲明成員變量106§4.7.2實(shí)例變量和類變量的區(qū)別
1.不同對象的實(shí)例變量互不相同
2.所有對象共享類變量
3.通過類名直接訪問類變量
例4-9Lader.java,Example4_9.java107§4.7.2實(shí)例變量和類變量的區(qū)別1.不同對象的實(shí)例107§4.7.3實(shí)例方法和類方法的定義
類中的方法也可分為實(shí)例方法和類方法。方法聲明時(shí),方法類型前面不加關(guān)鍵字static修飾的是實(shí)例方法、加static關(guān)鍵字修飾的是類方法(靜態(tài)方法)。classA{inta;floatmax(floatx,floaty){//實(shí)例方法…}
staticfloatjerry(){//類方法…}
staticvoidspeak(Strings){//類方法…}}108§4.7.3實(shí)例方法和類方法的定義類中的方法108§4.7.4實(shí)例方法和類方法的區(qū)別1.對象調(diào)用實(shí)例方法當(dāng)對象調(diào)用實(shí)例方法時(shí),該方法中出現(xiàn)的實(shí)例變量就是分配給該對象的實(shí)例變量;該方法中出現(xiàn)的類變量也是分配給該對象的變量,只不過這個(gè)變量和所有的其他對象共享而已。2.類名調(diào)用類方法類方法不僅可以被類創(chuàng)建的任何對象調(diào)用執(zhí)行,也可以直接通過類名調(diào)用。和實(shí)例方法不同的是,類方法不可以操作實(shí)例變量,這是因?yàn)樵陬悇?chuàng)建對象之前,實(shí)例成員變量還沒有分配內(nèi)存。例子4-10Example4_10.java
109§4.7.4實(shí)例方法和類方法的區(qū)別1.對象調(diào)用實(shí)例方109§4.8方法重載與多態(tài)方法重載的意思是:一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。例4-11
Tixing.java,
People.java,Circle.java,Example4_11.java
classA{floatadd(inta,intb){returna+b;}floatadd(longa,intb){returna+b;}doubleadd(doublea,intb){returna+b;}}110§4.8方法重載與多態(tài)方法重載的意思是:一個(gè)類中可110§4.9this關(guān)鍵字this是Java的一個(gè)關(guān)鍵字,表示某個(gè)對象。this可以出現(xiàn)在實(shí)例方法和構(gòu)造方法中,但不可以出現(xiàn)在類方法中。實(shí)例方法可以操作類的成員變量,當(dāng)實(shí)例成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是:this.成員變量;當(dāng)static成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是:類名.成員變量;
當(dāng)一個(gè)對象調(diào)用方法時(shí),方法中的實(shí)例成員變量就是指分配給該對象的實(shí)例成員變量,而static變量則和其他對象共享。因此,通常情況下,可以省略實(shí)例成員變量名字前面的“this.”,以及static變量前面的“類名.”。
但是,當(dāng)實(shí)例成員變量的名字和局部變量的名字相同時(shí),成員變量前面的“this.”或“類名.”就不可以省略。
注:this不能出現(xiàn)在類方法中,這是因?yàn)?,類方法可以通過類名直接調(diào)用,這時(shí),可能還沒有任何對象誕生。111§4.9this關(guān)鍵字this是Java的一個(gè)關(guān)鍵111§4.10包包是Java語言中有效地管理類的一個(gè)機(jī)制。包名的目的是有效的區(qū)分名字相同的類。不同Java源文件中兩個(gè)類名字相同時(shí),它們可以通過隸屬不同的包來相互區(qū)分。112§4.10包包是Java語言中有效地管理類的一個(gè)機(jī)制112§4.10.1包語句
通過關(guān)鍵字package聲明包語句。
package語句作為Java源文件的第一條語句,為該源文件中聲明的類指定包名。package語句的一般格式為:
package包名;
例如:
packagesunrise;package;
113§4.10.1包語句通過關(guān)鍵字pack113§4.10.2有包名的類的存儲目錄
如果一個(gè)類有包名,那么就不能在任意位置存放它,否則虛擬機(jī)將無法加載這樣的類。
程序如果使用了包語句,例如:packagetom.jiafei;那么存儲文件的目錄結(jié)構(gòu)中必須包含有如下的結(jié)構(gòu)
…\tom\jiafei
如:c:\1000\tom\jiafei并且要將源文件編譯得到的類的字節(jié)碼文件保存在目錄c:\1000\tom\jiafei中(源文件可以任意存放)。114§4.10.2有包名的類的存儲目錄如果一114§4.10.3運(yùn)行有包名的主類如果主類的包名是tom.jiafei,那么主類的字節(jié)碼一定存放在…\tom\jiefei目錄中,運(yùn)行時(shí)必須到tom\jiefei的上一層(即tom的父目錄)目錄中去運(yùn)行主類。假設(shè)tom\jiefei的上一層目錄是1000,那么,必須如下格式來運(yùn)行:C:\1000\javatom.jiafei.主類名
注:主類名是:“包名.主類名”例4-12
Student.java,
Example4_12.java
115§4.10.3運(yùn)行有包名的主類如果主類115§4.11import語句一個(gè)類可能需要另一個(gè)類聲明的對象作為自己的成員或方法中的局部變量,如果這兩個(gè)類在同一個(gè)包中,當(dāng)然沒有問題。如果一個(gè)類想要使用的那個(gè)類和它不在一個(gè)包中,要使用import語句完成使命。116§4.11import語句一個(gè)類可能需要116§4.11.1引入類庫中的類
如果用戶需要類庫中的類就必須使用import語句,如:
importjava.util.Date;例4-13Example4_13.java
117§4.11.1引入類庫中的類如果用戶需要類庫中的117§4.11.2引入自定義包中的類
用戶程序可以使用tom.jiafei包中的類如:importtom.jiafei.*;使用非類庫中有包名的類,也要使用import語句。例4-14Triangle.java
例4-15Example4_15.java
118§4.11.2引入自定義包中的類用戶程序可118§4.11.3使用無包名的類
之前,我們在源文件中一直沒有使用包語句,因此各個(gè)源文件得到的類都沒有包名。如果一個(gè)源文件中的類想使用無名包中的類,只要將這個(gè)無包名的類的字節(jié)碼和當(dāng)前類保存在同一目錄中即可。
例4-16A.java
,Example4_16.java
119§4.11.3使用無包名的類之前,我們119§4.11.4避免類名混淆1.區(qū)分無包名和有包名的類如果一個(gè)源文件使用了一個(gè)無名包中的A類,同時(shí)又用import語句引入了某個(gè)有包名的同名的類,如tom.jiafei中的A類,就可能引起類名的混淆。2.區(qū)分有包名的類如果一個(gè)源文件引入了兩個(gè)包中同名的類,那么在使用該類時(shí),不允許省略包名。120§4.11.4避免類名混淆1.區(qū)分無包名和有包名的120§4.12訪問權(quán)限當(dāng)用一個(gè)類創(chuàng)建了一個(gè)對象之后,該對象可以通過“.”運(yùn)算符操作自己的變量、使用類中的方法,但對象操作自己的變量和使用類中的方法是有一定限制的。
121§4.12訪問權(quán)限當(dāng)用一個(gè)類創(chuàng)建了一個(gè)對121§4.12.1何謂訪問權(quán)限
所謂訪問權(quán)限是指對象是否可以通過“.”運(yùn)算符操作自己的變量或通過“.”運(yùn)算符使用類中的方法。
訪問限制修飾符有private、protected和public,都是Java的關(guān)鍵字,用來修飾成員變量或方法。122§4.12.1何謂訪問權(quán)限所謂訪問權(quán)限122§4.12.2私有變量和私有方法用關(guān)鍵字private修飾的成員變量和方法稱為私有變量和私有方法。
對于私有成員變量或方法,只有在本類中創(chuàng)建該類的對象時(shí),這個(gè)對象才能訪問自己的私有成員變量和類中的私有方法。例4-17Yuan.java
,Example4_17.java
classTom{privatefloatweight;
privatefloatf(floata,floatb){
returna+b;}}classJerry{voidg(){Tomcat=newTom();cat.weight=23f;//非法
floatsum=cat.f(3,4);//非法}}123§4.12.2私有變量和私有方法用關(guān)鍵字pri123§4.12.3共有變量和共有方法
用public修飾的成員變量和方法被稱為共有變量和共有方法
。
我們在任何一個(gè)類中用類Tom創(chuàng)建了一個(gè)對象后,該對象能訪問自己的public變量和類中的public方法(也可以通過類名來操作成員變量、方法)。classTom{publicfloatweight;publicfloatf(floata,floatb){returna+b;}}classJerry{voidg(){Tomcat=newTom();cat.weight=23f;//合法
floatsum=cat.f(3,4);//合法}}124§4.12.3共有變量和共有方法用public124§4.12.4友好變量和友好方
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 5 We're family (說課稿)-2024-2025學(xué)年外研版(三起)(2024)英語三年級上冊
- 1《學(xué)習(xí)伴我成長》(說課稿)-部編版道德與法治三年級上冊
- Unit 2 Different families Part B Let's talk(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 2《用水計(jì)量時(shí)間》說課稿-2024-2025學(xué)年科學(xué)五年級上冊教科版
- 2025產(chǎn)品購銷合同樣書
- 2023九年級數(shù)學(xué)下冊 第25章 投影與視圖25.1 投影第2課時(shí) 正投影說課稿 (新版)滬科版001
- 2025城市民用戶燃?xì)夤こ虒?shí)施合同書范本范文
- 2025婦女發(fā)展監(jiān)測評估項(xiàng)目工程合同管理
- 2025合同模板合伙人利潤分配協(xié)議范本
- 2024-2025學(xué)年高中政治 第3單元 第6課 第1框 源遠(yuǎn)流長的中華文化說課稿 新人教版必修3001
- 現(xiàn)代通信原理與技術(shù)(第五版)PPT全套完整教學(xué)課件
- 社區(qū)獲得性肺炎教學(xué)查房
- 病例展示(皮膚科)
- GB/T 39750-2021光伏發(fā)電系統(tǒng)直流電弧保護(hù)技術(shù)要求
- DB31T 685-2019 養(yǎng)老機(jī)構(gòu)設(shè)施與服務(wù)要求
- 燕子山風(fēng)電場項(xiàng)目安全預(yù)評價(jià)報(bào)告
- 高一英語課本必修1各單元重點(diǎn)短語
- 糖尿病運(yùn)動指導(dǎo)課件
- 完整版金屬學(xué)與熱處理課件
- T∕CSTM 00640-2022 烤爐用耐高溫粉末涂料
- 心腦血管病的危害教學(xué)課件
評論
0/150
提交評論