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

下載本文檔

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

文檔簡介

2023/2/6第1頁注意:開始用功了!2023/2/6第2頁《Java2實用教程(第4版)》第4章配合例子源代碼一起使用Powerpoint制作:耿祥義張躍平類與對象2023/2/6第3頁主要內(nèi)容類構(gòu)造方法與對象的創(chuàng)建類與程序的基本結(jié)構(gòu)參數(shù)傳值對象的組合實例成員與類成員方法重載this關(guān)鍵字包import語句對象數(shù)組導讀2023/2/6第4頁§4.1編程語言的幾個發(fā)展階段

4.1.1面向機器語言

計算機處理信息的早期語言是所謂的機器語言,使用機器語言進行程序設(shè)計需要面向機器來編寫代碼,即需要針對不同的機器編寫諸如01011100這樣的指令序列。4.1.2面向過程語言

隨著計算機硬件功能的提高,在20世紀60年代出現(xiàn)了面向過程設(shè)計語言,如C語言等。用這些語言編程也稱為面向過程編程。語言把代碼組成叫做過程或言函數(shù)的塊。每個塊的目標是完成某個任務(wù)。使用這些語言編寫代碼指令時,不必再去考慮機器指令的細節(jié),只要按著具體語言的語法要求去編寫“源文件”。4.1.3面向?qū)ο笳Z言

基于對象的編程更加符合人的思維模式,使得編程人員更容易編寫出易維護、易擴展和易復用的程序代碼,更重要的是,面向?qū)ο缶幊坦膭顒?chuàng)造性的程序設(shè)計。

面向?qū)ο缶幊讨饕w現(xiàn)下列三個特性

封裝性

繼承

多態(tài)2023/2/6第5頁§4.2類類是Java語言中最重要的“數(shù)據(jù)類型”,類聲明的變量被稱作對象(見后面的4.3節(jié)),即類是用來創(chuàng)建對象的模板。

類的實現(xiàn)包括兩部分:類聲明和類體。基本格式為:class類名{

類體的內(nèi)容}class是關(guān)鍵字,用來定義類?!癱lass類名”是類的聲明部分,類名必須是合法的Java標識符。兩個大括號以及之間的內(nèi)容是類體。

2023/2/6第6頁§4.2.1類聲明◆類聲明:class類名以下是兩個類聲明的例子。classPeople{

…}class植物{

…}如:classPeople”和“class植物”稱作類聲明;“People”和“動物”分別是類名。◆給類命名時,遵守下列編程風格(這不是語法要求的,但應當遵守):1.如果類名使用拉丁字母,那么名字的首字母使用大寫字母,如。2.類名最好容易識別、見名知意。當類名由幾個“單詞”復合而成時,每個單詞的首字母使用大寫。

2023/2/6第7頁§4.2.2類體

◆類聲明之后的一對大括號“{”,“}”以及它們之間的內(nèi)容稱作類體,大括號之間的內(nèi)容稱作類體的內(nèi)容。

◆類體的內(nèi)容由兩部分構(gòu):一部分是變量的聲明,用來刻畫屬性;另一部分是方法的定義,用來刻畫行為功能。

classLader{

floatabove;//梯形的上底(變量聲明)

floatbottom;//梯形的下底(變量聲明)floatheight;//梯形的高(變量聲明)

floatarea;//梯形的面積(變量聲明)

floatcomputerArea(){//計算面積(方法)

area=(above+bottom)*height/2.0f;returnarea;}voidsetHeight(floath){//修改高(方法)

height=h;}}2023/2/6第8頁§4.2.3成員變量

類體中變量聲明部分所聲明的變量被稱作成員變量。

1.變量的類型:成員變量的類型可以是Java中的任何一種數(shù)據(jù)類型,包括基本類型:整型、浮點型、字符型;引用類型:數(shù)組、對象和接口(對象和接口見后續(xù)內(nèi)容)。2.變量的有效范圍:成員變量在整個類內(nèi)都有效,其有效性與它在類體中書寫的先后位置無關(guān)3.編程風格(1)一行只聲明一個變量。(2)變量的名字符合標識符規(guī)定。(3)變量名字見名知意,避免容易混淆的變量名字。2023/2/6第9頁§4.2.4方法

方法的定義包括兩部分:方法聲明和方法體。一般格式為:方法聲明部分{

方法體的內(nèi)容}

1.方法頭

方法頭由方法的類型、名稱和名稱之后的一對小括號以及其中的參數(shù)列表所構(gòu)成。無參數(shù)方法定義的方法頭中沒有參數(shù)列表,即方法名稱之后一對小括號中無任何內(nèi)容,例如:intspeak(){//無參數(shù)的方法頭return23;}intadd(intx,inty,intz)//有參數(shù)的方法頭{returnx+y+z;}

根據(jù)程序的需要,方法返回的數(shù)據(jù)的類型可以是Java中的任何數(shù)據(jù)類型之一,當一個方法不需要返回數(shù)據(jù)時,返回類型必須是void。參數(shù)是用逗號隔開的一些變量聲明。方法的參數(shù)可以是任意的Java數(shù)據(jù)類型。方法的名字必須符合標識符規(guī)定,在給方法命名的習慣和給變量命名的習慣相同。2023/2/6第10頁

2.方法體

方法聲明之后的一對大括號“{”

,“}”以及之間的內(nèi)容稱為方法的方法體。方法體的內(nèi)容包括局部變量的聲明和Java語句。在方法體內(nèi)可以對成員變量和方法體中聲明的局部變量進行操作。在方法體中聲明的變量和方法的參數(shù)被稱作局部變量,如:

intgetSum(intn){//參數(shù)變量n是局部變量

intsum=0;//聲明局部變量sumfor(inti=1;i<=n;i++){//for循環(huán)語句

sum=sum+i;}returnsum;//return語句}和類的成員變量不同的是,局部變量只在方法內(nèi)有效,而且與其聲明的位置有關(guān)。方法的參數(shù)在整個方法內(nèi)有效,方法內(nèi)的局部變量從聲明它的位置之后開始有效。如果局部變量的聲明是在一個復合語句中,那么該局部變量的有效范圍是該復合語句,如果局部變量的聲明是在一個循環(huán)語句中,那么該局部變量的有效范圍是該循環(huán)語句。例如:

publicclassA{voidf(){intm=10,sum=0;//成員變量,在整個類中有效

if(m>9){intz=10;//z僅僅在該復合語句中有效

z=2*m+z;}for(inti=0;i<m;i++){sum=sum+i;//i僅僅在該循環(huán)語句中有效

}m=sum;//合法,因為m和sum有效

z=i+sum;//非法,因為i和z已無效

}}2023/2/6第11頁3.區(qū)分成員變量和局部變量

如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即該成員變量在這個方法內(nèi)暫時失效。例如:

classTom{

intx=10,y;voidf(){

intx=5;y=x+x;//y得到的值是10,不是20。如果方法f中沒有“intx=5;”,y的值將是20}}如果想在該方法中使用被隱藏的成員變量,必須使用關(guān)鍵字this(在4.9節(jié)this關(guān)鍵字)

classTom{intx=10,y;voidf(){intx=5;y=x+this.x;//y得到的值是15}}2023/2/6第12頁4.局部變量沒有默認值成員變量有默認值(見后面的4.3節(jié)),但局部變量沒有默認值,因此在使用局部變量之前,必須保證局部變量有具體的值。例如:下列InitError類無法通過編譯

classInitError{intx=10,y;//y的默認值是0

voidf(){

intm;//m沒有默認值,但編譯無錯誤

x=y+m;//無法通過編譯,因為在使用m之前未指定m的值}}

2023/2/6第13頁§4.2.5需要注意的問題

類體的內(nèi)容由兩部分構(gòu)成:一部分是變量的聲明,另一部分是方法的定義。

對成員變量的操作只能放在方法中,方法可以對成員變量和該方法體中聲明的局部變量進行操作。在聲明成員變量時可以同時賦予初值,但是不可以在類體中有單獨的賦值語句(不可以有變量的聲明和方法的定義以外的其它語句)。

2023/2/6第14頁§4.2.6類的UML圖

UML(UnifiedModelingLanguageDiagram)圖屬于結(jié)構(gòu)圖,常被用于描述一個系統(tǒng)的靜態(tài)結(jié)構(gòu)。一個UML中通常包含有類(Class)的UML圖,接口(Interface)的UML圖以及泛化關(guān)系(Generalization)的UML圖、關(guān)聯(lián)關(guān)系(Association)的UML圖、依賴關(guān)系(Dependency)的UML圖和實現(xiàn)關(guān)系(Realization)的UML圖。在類的UML圖中,使用一個長方形描述一個類的主要構(gòu)成,將長方形垂直地分為三層。第1層是名字層;第2層是變量層,也稱屬性層;第3層是方法層,也稱操作層。2023/2/6第15頁§4.3構(gòu)造方法與對象的創(chuàng)建

類是面向?qū)ο笳Z言中最重要的一種數(shù)據(jù)類型,那么就可以用它來聲明變量。在面向?qū)ο笳Z言中,用類聲明的變量被稱作對象。和基本數(shù)據(jù)類型不同,在用類聲明對象后,還必須要創(chuàng)建對象,即為聲明的對象分配變量(確定對象所具有的屬性),當使用一個類創(chuàng)建一個對象時,也稱給出了這個類的一個實例。通俗的講,類是創(chuàng)建對象的“模板”,沒有類就沒有對象。構(gòu)造方法和對象的創(chuàng)建密切相關(guān)。2023/2/6第16頁§4.3.1構(gòu)造方法

構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型。允許一個類中編寫若干個構(gòu)造方法,但必須保證他們的參數(shù)不同,即參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。

需要注意的是如果類中沒有編寫構(gòu)造方法,系統(tǒng)會默認該類只有一個構(gòu)造方法,該默認的構(gòu)造方法是無參數(shù)的,且方法體中沒有語句。

1如果類里定義一個或多個構(gòu)造方法,那么Java不再提供默認的構(gòu)造方法。

2需要特別注意的是,構(gòu)造方法沒有類型。2023/2/6第17頁§4.3.2創(chuàng)建對象創(chuàng)建一個對象包括對象的聲明和為對象分配變量兩個步驟。1.對象的聲明

一般格式為:類的名字對象名字;如:Laderlader;XiyoujiRenwuzhubajie;2.為聲明的對象分配變量

使用new運算符和類的構(gòu)造方法為聲明的對象分配變量,即創(chuàng)建對象。如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認的構(gòu)造方法,默認的構(gòu)造方法是無參數(shù)的,且方法體中沒有語句。

例如:zhubajie=newXiyoujiRenwu();

以下是兩個詳細的例子。例子1

例子2classXiyoujiRenwu{floatheight,weight;Stringhead,ear;voidspeak(Strings){System.out.println(s);}}publicclassExample4_1{publicstaticvoidmain(Stringargs[]){

XiyoujiRenwuzhubajie;

//聲明對象

zhubajie=newXiyoujiRenwu();

//為對象分配變量(使用new和默認的構(gòu)造方法)}}2023/2/6第18頁3.對象的內(nèi)存模型(1)聲明對象時的內(nèi)存模型

(2)對象分配變量后的內(nèi)存模型(3)創(chuàng)建多個不同的對象

一個類通過使用new運算符可以創(chuàng)建多個不同的對象創(chuàng)建兩個對象:zhubajie、sunwukongzhubajie=newXiyoujiRenwu();sunwukong=newXiyoujiRenwu();創(chuàng)建對象zhubajie時,XiyoujiRenwu類中的成員變量height,weight,head,ear被分配內(nèi)存空間,并返回一個引用給zhubajie;當再創(chuàng)建一個對象sunwukong時,XiyoujiRenwu類中的成員變量height,weight,head,ear再一次被分配內(nèi)存空間,并返回一個引用給sunwukong。sunwukong的變量所占據(jù)的內(nèi)存空間和zhubajie的變量所占據(jù)的內(nèi)存空間是互不相同的位置。內(nèi)存模型如下圖4.5所示:

2023/2/6第19頁§4.3.3使用對象

1.對象操作自己的變量(體現(xiàn)對象的屬性)通過使用運算符“.”對象操作自己的變量(對象的屬性)2.對象調(diào)用類中的方法(體現(xiàn)對象的行為)對象創(chuàng)建之后,可以使用點運算符“.”調(diào)用創(chuàng)建它的類中的方法,從而產(chǎn)生一定的行為(功能).3.體現(xiàn)封裝

當對象調(diào)用方法時,方法中出現(xiàn)的成員變量就是指分配給該對象的變量。在講述類的時候講過:類中的方法可以操作成員變量。當對象調(diào)用方法時,方法中出現(xiàn)的成員變量就是指分配給該對象的變量。例子3中,主類的main方法中使用XiyoujiRenwu創(chuàng)建兩個對象:zhubajie、sunwukong,運行效果如圖4.6。

例子32023/2/6第20頁§4.3.4對象的引用和實體

當用類創(chuàng)建一個對象時,類中的成員變量在分配內(nèi)存空間,這些內(nèi)存空間稱作該對象的實體或?qū)ο蟮淖兞?,而對象中存放著引用?/p>

一個類創(chuàng)建的兩個對象,如果具有相同的引用,那么就具有完全相同的實體。

使用Point類分別創(chuàng)建了兩個對象p1,p2:Pointp1=newPoint(5,15);Pointp2=newPoint(8,18);

內(nèi)存模型如圖4.9所示

2023/2/6第21頁假如在程序中使用了如下的賦值語句:p1=p2;即把p2中的引用賦給了p1,因此p1和p2本質(zhì)上是一樣的了.

一個類創(chuàng)建的兩個對象,如果具有相同的引用,那么就具有完全相同的實體(變量)。

內(nèi)存模型由圖4.9變成圖4.10所示。

2023/2/6第22頁例子4將對象p2的引用賦給了p1對象,運行效果如圖4.11。

例子42023/2/6第23頁§4.4類與程序的基本結(jié)構(gòu)

一個Java應用程序(也稱為一個工程)是由若干個類所構(gòu)成,這些類可以在一個源文件中,也可以分布在若干個源文件中,如圖4.12所示。2023/2/6第24頁例子5

中一共有三個Java源文件(Example4_5.java

Rect.java

Lader.java

,需要打開記事本三次,分別編輯、保存這三個Java源文件),其中Example4_5.java是含有主類的Java源文件。

Java應用程序從主類的main方法開始執(zhí)行。在編寫一個Java應用程序時,可以編寫若干個Java源文件,每個源文件編譯后產(chǎn)生一個類的字節(jié)碼文件。

Example4_5.java

Rect.java

Lader.java

運行主類,程序的輸出結(jié)果是:矩形的面積:2766.5266梯形的面積:1517.07888。2023/2/6第25頁§4.5參數(shù)傳值

方法中最重要的部分之一就是方法的參數(shù),參數(shù)屬于局部變量,當對象調(diào)用方法時,參數(shù)被分配內(nèi)存空間,并要求調(diào)用者向參數(shù)傳遞值,即方法被調(diào)用時,參數(shù)變量必須有具體的值。2023/2/6第26頁§4.5.1傳值機制

在Java中,方法的所有參數(shù)都是“傳值”的,也就是說,方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。例如,如果向方法的int型參數(shù)x傳遞一個int值,那么參數(shù)x得到的值是傳遞的值的拷貝。2023/2/6第27頁§4.5.2基本數(shù)據(jù)類型參數(shù)的傳值

對于基本數(shù)據(jù)類型的參數(shù),向該參數(shù)傳遞的值的級別不可以高于該參數(shù)的級別。

例子6

中有一個源文件Example4_6.java

Example4_6.java在主類的main方法中使用Computer類來創(chuàng)建對象,該對象可以調(diào)用add(intx,inty)計算兩個整數(shù)之和,因此,Computer類的對象在調(diào)用add(intx,inty)方法時,必須向方法的參數(shù)傳遞值Example4_6.java2023/2/6第28頁§4.5.3引用類型參數(shù)的傳值

當參數(shù)是引用類型時,“傳值”傳遞的是變量中存放的“引用”,而不是變量所引用的實體。如圖4.13所示

2023/2/6第29頁

例子7模擬收音機使用電池。例子7中使用的主要類如下。Radio類負責創(chuàng)建一個“收音機”對象(Radio類在Radio.java中)。Battery類負責創(chuàng)建“電池”對象(Battery類在Battery.java中)。Radio類創(chuàng)建的“收音機”對象調(diào)用openRadio(Batterybattery)方法時,需要將一個Battery類創(chuàng)建“電池”對象傳遞給該方法的參數(shù)battery,即模擬收音機使用電池。在主類(Example4_7.java

)中將Battery類創(chuàng)建“電池”對象:nanfu,傳遞給openRadio(Batterybattery)方法的參數(shù)battery,該方法消耗了battery的儲電量(打開收音機會消耗電池的儲電量),那么nanfu的儲電量就發(fā)生了同樣的變化例子7(Battery.java

,Radio.java

,Example4_7.java

)收音機使用電池的示意圖以及程序的運行效果如圖4.14(a)和4.14(b)。

2023/2/6第30頁

例子8中(運行效果如圖4.15)模擬圓錐用圓作為底,涉及的類如下。Circle類負責創(chuàng)建圓對象。

Circular類負責創(chuàng)建圓錐對象,Circular類創(chuàng)建圓錐對象時,需要將

Circle類的實例:即“圓”對象的引用傳遞給圓錐對象的Circle類型的成員變量

Circle.java

,Circular.java

,Example4_8.java

2023/2/6第31頁§4.6對象的組合

一個類可以把對象作為自己的成員變量,如果用這樣的類創(chuàng)建對象,那么該對象中就會有其它對象,也就是說該對象將其他對象作為自己的組成部分,或者說該對象是由幾個對象組合而成。2023/2/6第32頁§4.6.1組合與復用

如果一個對象a組合了對象b,那么對象a就可以委托對象b調(diào)用其方法,即對象a以組合的方式復用對象b的方法。例如,圓錐對象在計算體積時,首先委托圓錐的底(一個Circle對象)bottom調(diào)用getArea()方法計算底的面積,然后圓錐對象再計算出自身的體積例子9模擬手機和SIM卡的組合關(guān)系。涉及的類如下:l

SIM類負責創(chuàng)建SIM卡SIM.java

。l

MobileTelephone類負責創(chuàng)建手機MobileTelephone.java

,手機可以組合一個SIM卡,并可以調(diào)用setSIM(SIMcard)方法更改其中的SIM卡。程序運行效果如圖4.20。SIM.java

,MobileTelephone.java

,Example4_9.java2023/2/6第33頁§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖

1

關(guān)聯(lián)關(guān)系

2依賴關(guān)系

2023/2/6第34頁§4.7實例成員與類成員

§4.7.1實例變量和類變量的聲明

在聲明成員變量時,用關(guān)鍵字static給予修飾的稱作類變量,否則稱作實例變量(類變量也稱為static變量,靜態(tài)變量)。2023/2/6第35頁§4.7.2實例變量和類變量的區(qū)別

1.不同對象的實例變量互不相同

2.所有對象共享類變量

3.通過類名直接訪問類變量

2023/2/6第36頁例子10中的Lader.java中的Lader類創(chuàng)建的梯形對象共享一個下底。程序運行效果如圖4.23。

Lader.java

,Example4_10.java

2023/2/6第37頁§4.7.3實例方法和類方法的定義

類中的方法也可分為實例方法和類方法。方法聲明時,方法類型前面不加關(guān)鍵字static修飾的是實例方法、加static關(guān)鍵字修飾的是類方法(靜態(tài)方法)。

2023/2/6第38頁§4.7.4實例方法和類方法的區(qū)別

1.對象調(diào)用實例方法當對象調(diào)用實例方法時,該方法中出現(xiàn)的實例變量就是分配給該對象的實例變量;該方法中出現(xiàn)的類變量也是分配給該對象的變量,只不過這個變量和所有的其他對象共享而已。

2.類名調(diào)用類方法從而類方法不僅可以被類創(chuàng)建的任何對象調(diào)用執(zhí)行,也可以直接通過類名調(diào)用。和實例方法不同的是,類方法不可以操作實例變量,這是因為在類創(chuàng)建對象之前,實例成員變量還沒有分配內(nèi)存。2023/2/6第39頁在下面的例子11中,首先將一個數(shù)組排序,然后使用二分法判斷用戶從鍵盤輸入的整數(shù)是否和數(shù)組中某個元素的值相同,即是否在數(shù)組中。

例子11Java類庫提供的Array類提供的static方法:publicstaticvoidsort(doublea[]):排序數(shù)組a和publicstaticintbinarySearch(double[]a,doublenumber):判斷參數(shù)number指定的數(shù)值是否在參數(shù)a指定的數(shù)組中

2023/2/6第40頁§4.8方法重載與多態(tài)publicclassMethodOverload{publicstaticvoidmain(String[]args){System.out.println("Thesquareofinteger7is"+square(7));System.out.println("\nThesquareofdouble7.5is"+square(7.5));}publicstaticintsquare(intx){returnx*x;}publicstaticdoublesquare(doubley){returny*y;}}請看下段代碼有什么特殊之處2023/2/6第41頁§4.8方法重載與多態(tài)“方法的返回值不能作為方法重載的判斷條件“兩個或多個方法才能構(gòu)成“重載關(guān)系”方法名一致參數(shù)類型不同,參數(shù)個數(shù)不同,或者是參數(shù)類型的順序不同重載的條件需要注意2023/2/6第42頁§4.8方法重載與多態(tài)方法重載的意思是:一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。4.8.1方法重載的語法規(guī)則例子12中的People類中hello方法是重載方法,運行效果如圖4.26。例12例子13中Student類(Student.java,Circle.java,Tixing.java,Example4_13.java)中的computerArea方法是重載方法。程序運行效果如圖4.27。例132023/2/6第43頁§4.9this關(guān)鍵字this是Java的一個關(guān)鍵字,表示當前對象。this可以出現(xiàn)在實例方法和構(gòu)造方法中。this關(guān)鍵字出現(xiàn)在類的構(gòu)造方法中時,代表使用該構(gòu)造方法所創(chuàng)建的對象.當this關(guān)鍵字出現(xiàn)實例方法中時,this就代表正在調(diào)用該方法的當前對象。

2023/2/6第44頁§4.9.1在構(gòu)造方法中使用this

this關(guān)鍵字出現(xiàn)在類的構(gòu)造方法中時,代表使用該構(gòu)造方法所創(chuàng)建的對象。例子14中,People類的構(gòu)造方法中使用了this

2023/2/6第45頁§4.9.2在實例方法中使用this

實例方法必須只能通過對象來調(diào)用,不能用類名來調(diào)用。當this關(guān)鍵字出現(xiàn)在實例方法中時,代表正在調(diào)用該方法的當前對象。實例方法可以操作類的成員變量,當實例成員變量在實例方法中出現(xiàn)時,默認的格式是:this.成員變量;當類的其它方法被實例方法調(diào)用時,默認的格式是:this.方法;

當static成員變量在實例方法中出現(xiàn)時,默認的格式是:

類名.成員變量;

classA{intx;staticinty;voidf(){this.x=100;//可省略thisA.y=200;//可省略this}}classB{voidf(){this.g();//可省略B.h=200;//可省略}voidg(){System.ouy.println(“OK”);}staticvoidh(){System.out.println(“hello”);}舉例:2023/2/6第46頁publicclassThisTest{privateinti=0;

ThisTest(inti){this.i=i+1;}//this引用成員變量i

ThisTest(Strings){System.out.println("Stringconstructor:"+s);}ThisTest(inti,Strings){this(s);//this調(diào)用構(gòu)造函數(shù)2

this.i=i++;

}//this以引用該類的成員變量publicThisTestf(){this.i++;returnthis;//返回當前的對象,該對象屬于(ThisTest)}}this關(guān)鍵字

2023/2/6第47頁this表示類中的屬性和構(gòu)造方法this可調(diào)用本類中的構(gòu)造方法表示當前對象this關(guān)鍵字

注:this不能出現(xiàn)在類方法中當成員變量名和局部變量名相同時,this關(guān)鍵字不可以省略2023/2/6第48頁§4.10包

包是Java語言中有效地管理類的一個機制。包名的目的是有效的區(qū)分名字相同的類。不同Java源文件中兩個類名字相同時,它們可以通過隸屬不同的包來相互區(qū)分。2023/2/6第49頁§4.10.1包語句

通過關(guān)鍵字package聲明包語句。package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。package語句的一般格式為:

package包名;

包對應于文件系統(tǒng)的目錄,package語句中,用‘.’來指明包(目錄)的層次;包通常用小寫單詞,類名首字母通常大寫。2023/2/6第50頁§4.10.2有包名的類的存儲目錄

程序如果使用了包語句,例如:

packagetom.jiafei;那么存儲文件的目錄結(jié)構(gòu)中必須包含有如下的結(jié)構(gòu)

…\tom\jiafei

如:c:\1000\tom\jiafei并且要將源文件編譯得到的類的字節(jié)碼文件保存在目錄c:\1000\tom\jiafei中(源文件可以任意存放)。2023/2/6第51頁§4.10.3運行有包名的主類

如果主類的包名是tom.jiafei,那么主類的字節(jié)碼一定存放在…\tom\jiefei目錄中,運行時必須到tom\jiefei的上一層(即tom的父目錄)目錄中去運行主類。假設(shè)tom\jiefei的上一層目錄是1000,那么,必須如下格式來運行:C:\1000\javatom.jiafei.主類名

例子15中的Student.java和Example4_15.java使用了包語句。例子15的編譯、運行效果如圖4.28。

2023/2/6第52頁§4.11import語句一個類可能需要另一個類聲明的對象作為自己的成員或方法中的局部變量,如果這兩個類在同一個包中,當然沒有問題。如果一個類想要使用的那個類和它不在一個包中,要使用import語句完成使命。import語句告訴編譯器到哪里去尋找類2023/2/6第53頁§4.11.1引入類庫中的類

如果用戶需要類庫中的類就可以使用import語句,如:

importjava.until.Date;引入java.util包中的Date類.例子16中的Example4_16.java使用了import語句,運行效果如圖4.29

圖4.29引入類庫中的類java.lang----包含一些Java語言的核心類,如String、Math、Integer、System和Thread,提供常用功能。----包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類。java.io----包含能提供多種輸入/輸出功能的類。java.util----包含一些實用工具類,如定義系統(tǒng)特性、使用與日期日歷相關(guān)的函數(shù)。2023/2/6第54頁§4.11.2引入自定義包中的類

用戶程序也可以使用import語句引入非類庫中有包名的類,如:importtom.jiafei.*;在用戶程序所在目錄下建立和包相對應的子目錄結(jié)構(gòu),比如用戶程序所在目錄是C:\ch4,想使用import語句引入tom.jiafei包中的類,那么根據(jù)包名建立如下的目錄結(jié)構(gòu):C:\ch4\tom\jiafei2023/2/6第55頁將例子17中的Triangle.java源文件保存到C:\ch4\sohu\com中,并編譯通過,以便使得ch4目錄下的類能使用import語句引入Triangle類。例子18中的Example4_18.java中的主類(無包名)使用import語句引入包中的Triangle類,以便創(chuàng)建三角形,并計算三角形的面積。將Example4_18.java保存在C:\ch4目錄中(因為ch4下有sohu\com子目錄)。程序運行效果如圖4.30。

2023/2/6第56頁§4.12訪問權(quán)限當用一個類創(chuàng)建了一個對象之后,該對象可以通過“.”運算符操作自己的變量、使用類中的方法,但對象操作自己的變量和使用類中的方法是有一定限制的。

2023/2/6第57頁§4.12.1何謂訪問權(quán)限

所謂訪問權(quán)限是指對象是否可以通過“.”運算符操作自己的變量或通過“.”運算符使用類中的方法。

訪問限制修飾符有private、protected和public,都是Java的關(guān)鍵字,用來修飾成員變量或方法。

在編寫類時,類中的實例方法總是可以操作該類中的實例變量和類變量;類方法總是可以操作該類中的類變量,與訪問限制符無關(guān)。2023/2/6第58頁§4.12.2私有變量和私有方法

用關(guān)鍵字private修飾的成員變量和方法稱為私有變量和私有方法。對于私有成員變量或方法,只有在本類中創(chuàng)建該類的對象時,這個對象才能訪問自己的私有成員變量和類中的私有方法。

某個類在另外一個類中創(chuàng)建對象后,如果不希該對象直接訪問自己的變量,即通過“.”運算符來操作自己的成員變量,就應當將該成員變量訪問權(quán)限設(shè)置為private。面向?qū)ο缶幊烫岢珜ο髴斦{(diào)用方法來改變自己的屬性,類應當提供操作數(shù)據(jù)的方法,這些方法可以經(jīng)過精心的設(shè)計,使得對數(shù)據(jù)的操作更加合理,如例子19(Example4_19.java,Student.java

)所示。

注:在除了本類以外的類中,私有類變量或類方法均不能通過類名操作或調(diào)用2023/2/6第59頁§4.12.3共有變量和共有方法用public修飾的成員變量和方法被稱為共有變量和共有方法

。

我們在任何一個類中用類Tom創(chuàng)建了一個對象后,該對象能訪問自己的public變量和類中的public方法(也可以通過類名來操作成員變量、方法)。2023/2/6第60頁§4.12.4友好變量和友好方法當在另外一個類中用類Tom創(chuàng)建了一個對象后,如果這個類與Tom類在同一個包中,那么該對象能訪問自己的友好變量和友好方法。在任何一個與Tom同一包中的類中,也可以通過Tom類的類名訪問Tom類的類友好成員變量和類友好方法。classJerry{voidg(){Tomcat=newTom();cat.weight=23f;//合法floatsum=cat.f(3,4);//合法}}當Jerry和Tom在同一包中時:注:如果源文件使用import語句引入了另外一個包中的類,并用該類創(chuàng)建了一個對象,該對象將不能訪問自己的友好變量和友好方法。2023/2/6第61頁§4.12.5受保護的成員變量和方法用protected修飾的成員變量和方法被稱為受保護的成員變量和受保護的方法,例如:classTom{protectedfloatweight;

//weight是protected的float型變量protectedfloatf(floata,floatb){

//方法f是protected方法returna+b;}}classJerry{voidg(){Tomcat=newTom();cat.weight=23f;//合法floatsum=cat.f(2,4);//合法}}Tom和Jerry在同一個包中時合法的2023/2/6第62頁§4.12.6public類與友好類

類聲明時,如果在關(guān)鍵字class前面加上public關(guān)鍵字,就稱這樣的類是一個public類。可以在任何另外一個類中,使用public類創(chuàng)建對象。

如果一個類不加public修飾,這樣的類被稱作友好類。在另外一個類中使用友好類創(chuàng)建對象時,要保證它們是在同一包中。注:不能用procted和private修飾類訪問限制符的訪問權(quán)限2023/2/6第63頁§4.13基本類型的類封裝

Java的基本數(shù)據(jù)類型包括:byte、int、short、long、float、double、char。Java提供了基本數(shù)據(jù)類型相關(guān)的類,實現(xiàn)了對基本數(shù)據(jù)類型的封裝。這些類分別是:Byte、Integer、Short、Long、Float、Double和Character類。這些類在java.lang包中。2023/2/6第64頁§4.13.1Double和Float類

Double類和Float類實現(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ù)。例如:publicclassTest{publicstaticvoidmain(String[]args){Doubledouble1=newDouble(5);System.out.println(double1.doubleValue());Floatfloat1=newFloat(6);System.out.println(float1.floatValue());}}2023/2/6第65頁§4.13.2Byte、Short、Integer、Long類上述類的構(gòu)造方法分別:

Byte(bytenum)Short(shortnum)Integer(intnum)Long(longnum)Byte、Short、Integer和Long對象分別調(diào)用byteValue()、shortValue()、intValue()和longValue()方法返回該對象含有的基本型數(shù)據(jù)。

2023/2/6第66頁§4.13.3Character類

Character類實現(xiàn)了對char基本型數(shù)據(jù)的類包裝。Character類的構(gòu)造方法:Character(charc)Character類中的一些常用類方法:publicstaticbooleanisDigit(charch)ch是數(shù)字字符返回true。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論