




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
本章導讀1.類聲明和類體2.類體的構成3.構造方法與對象的創(chuàng)建4.對象的引用與實體5.成員變量6.方法第4章
類與對象本章導讀第4章類7.方法重載8.this關鍵字9.包10.import語句11.訪問權限12.基本類型數(shù)據(jù)的類包裝13.反編譯和文檔生成器7.方法重載4.1類聲明和類體
類是組成Java程序的基本要素。類封裝了一類對象的狀態(tài)和方法。類是用來定義對象的模板??梢杂妙悇?chuàng)建對象,當使用一個類創(chuàng)建了一個對象時,我們也說給出了這個類的一個實例。在語法上,類由兩部分構成:類聲明和類體?;靖袷綖椋篶lass類名{類體的內(nèi)容……}4.1類聲明和類體類是組成class是關鍵字,用來定義類?!癱lass類名”是類的聲明部分,類名必須是合法的Java標識符。兩個大括號“{”、“}”以及之間的內(nèi)容稱作類體。
以下是兩個類聲明的例子。classDog{…}class機動車
{…}class是關鍵字,用來定義類。“clas類的名字不能是Java中的關鍵字,要符合標識符規(guī)定,即名字可以由字母、下劃線、數(shù)字或美元符號組成,并且第一個字符不能是數(shù)字。但給類命名時,最好遵守下列習慣:(1)如果類名使用拉丁字母,那么名字的首字母使用大寫字母,如Hello、Time、,People等。(2)類名最好容易識別、見名知意。當類名由幾個“單詞”復合而成時,每個單詞的首寫字母使用大寫,如BeijingTime、AmericanGame、HelloChina等。
返回類的名字不能是Java中的關鍵字,要符合4.2類體的構成
類體內(nèi)容可以有2種類型的成員:1.成員變量:通過變量聲明定義的變量,稱作成員變量或域,用來刻畫類創(chuàng)建的對象的屬性。將在后面的第3節(jié)詳細地討論成員變量。2.方法:方法是類體的重要成員之一。其中的構造方法是具有特殊地位的方法,供類創(chuàng)建對象時使用,用來給出類所創(chuàng)建的對象的初始狀態(tài),另一類方法,可以由類所創(chuàng)建的對象調(diào)用,對象調(diào)用這些方法操作成員變量形成一定的算法,體現(xiàn)對象具有某種功能。4.2類體的構成類體內(nèi)容可以有2種類型的成員:
下面是一個類名為“機動車”的類,類體內(nèi)容的變量定義部分定義了2個float類型的變量:“weight”、“height”和一個int型變量“speed”;方法定義部分定義了3個方法:“changSpeed”、“getWeight”和“getHeight”。成員變量的類型可以是Java中的任何一種數(shù)據(jù)類型,包括前面學習過的基本類型:整型、浮點型、字符型、數(shù)組以及后面要學習的對象及接口。成員變量在整個類內(nèi)都有效,與它在類體中書寫的先后位置無關,例如,前述的機動車類也可以寫成:
下面是一個類名為“機動車”的類,類體內(nèi)容的變
在定義類的成員變量時可以同時賦予初值,表明類所創(chuàng)建的對象的初始狀態(tài)。需要注意的是。對成員變量的操作只能放在方法中,方法可以對成員變量進行操作形成算法,如:但是不可以這樣做:因為,a=12是賦值語句,不是數(shù)據(jù)的聲明。類的成員類型中可以有數(shù)據(jù)和方法,即數(shù)據(jù)的定義和方法的定義,但沒有語句,語句必須放在方法中。
返回在定義類的成員變量時可以同時賦予初值,表明4.3構造方法與對象的創(chuàng)建
類中有一部分方法稱作構造方法,類創(chuàng)建對象時需使用構造方法,以便給類所創(chuàng)建的對象一個合理的初始狀態(tài)。構造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,并且不返回任何數(shù)據(jù)類型,即它是void型,但void必須省略不寫。Java允許一個類中有若干個構造方法,但這些構造方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。下面的Rect類有兩個構造方法:
4.3構造方法與對象的創(chuàng)建類中有一部分方當使用一個類創(chuàng)建了一個對象時,我們也說給出了這個類的一個實例。創(chuàng)建一個對象包括對象的聲明和為對象分配成員變量兩個步驟。1.對象的聲明。一般格式為:類的名字
對象名字;如:RectrectangleOne;
當使用一個類創(chuàng)建了一個對象時,我們也說給2.為聲明的對象分配成員變量使用new運算符和類的構造方法為聲明的對象分配成員變量,如果類中沒有構造方法,系統(tǒng)會調(diào)用默認的構造方法(默認的構造方法是無參數(shù)的,你一定還記得構造方法的名字必須和類名相同這一規(guī)定),上述的Rect類提供了2個構造方法,下面都是合法的創(chuàng)建對象的語句:rectangleOne=newRect();或rectangleOne=newRect(10,20);2.為聲明的對象分配成員變量如果類里定義了一個或多個構造方法,那么Java不提供默認的構造方法。如果上述Rect只提供一個帶參數(shù)的構造方法,代碼:rectangleOne=newRect();創(chuàng)建對象是非法的。創(chuàng)建對象的代碼:
rectangleOne=newRect(10,20);會實現(xiàn)下述兩件事:(1)為成員變量分配內(nèi)存空間,然后執(zhí)行構造方法中的語句。(2)給出一個信息,已確保這些成員變量是屬于對象rectangleOne的。如果類里定義了一個或多個構造方法,那創(chuàng)建對象就是指為它分配成員變量,并獲得一個引用,以確保這些成員變量由它來“操作管理”。為對象分配成員變量后,內(nèi)存模型由聲明對象時的模型圖4.1,變成如圖4.2所示,箭頭示意對象可以操作這些屬于自己的成員變量。圖4.2分配實體后的對象sideBsideA
20
100xAA11RectangleOne創(chuàng)建對象就是指為它分配成員變量,并獲得3.創(chuàng)建多個不同的對象一個類通過使用new運算符可以創(chuàng)建多個不同的對象,這些對象將被分配不同的內(nèi)存空間,因此,改變其中一個對象的狀態(tài)不會影響其它對象的狀態(tài)。例如,我們使用前面的Rect類創(chuàng)建兩個對象:rectangleOne、rectangleTwo。rectangleOne=newRect(10,20);rectangleTwo=newRect(33,66);當創(chuàng)建對象rectangleOne時,Rect類中的成員變量sizeA、sizeB被分配內(nèi)存空間,并返回一個引用給ectangleOne;
3.創(chuàng)建多個不同的對象當再創(chuàng)建一個對象rectangleTwo時,Rect類中的成員變量sizeA、sizeB再一次被分配內(nèi)存空間,并返回一個引用給rectangleTwo。內(nèi)存模型如圖4.3所示。
sideBsideA
20
100xAA11rectangleOne圖4.3創(chuàng)建多個對象sideBsideA
66
330xBB42rectangleTwo當再創(chuàng)建一個對象rectangleT4.使用對象對象不僅可以操作自己的變量改變狀態(tài),而且還擁有了使用創(chuàng)建它的那個類中的方法的能力,對象通過使用這些方法可以產(chǎn)生一定的行為。通過使用運算符“.”,對象可以實現(xiàn)對自己的變量訪問和方法的調(diào)用。(1)對象操作自己的變量(對象的屬性)(2)對象調(diào)用類中的方法(對象的功能)下面例子1中,“Lader”類創(chuàng)建了2個對象:laderOne,laderTwo。
返回4.使用對象返回4.4對象的引用與實體
我們已經(jīng)知道,當用類創(chuàng)建一個對象時,成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱做該對象的實體或變量,而對象中存放著引用,以確保這些變量由該對象操作使用。因此,如果兩個對象有相同的引用,那么就具有同樣的實體。假如使用例子1“Lader”類的構造方法創(chuàng)建了兩個對象t1,t2。t1=newLader(11,22,33);t2=newLader(6,12,18);4.4對象的引用與實體我們
Java具有“垃圾收集”機制,Java的運行環(huán)境周期地檢測某個實體是否已不再被任何對象所引用,如果發(fā)現(xiàn)這樣的實體,就釋放實體占有的內(nèi)存。因此,Java編程人員不必象C++程序員那樣,要時刻自己檢查哪些對象應該釋放內(nèi)存。當把變量t2中存放的引用賦給t1后,最初分配給對象t1的成員變量(實體)所占有的內(nèi)存就會被釋放。沒有實體的對象稱作空對象??諏ο蟛荒苁褂?,即不能讓一個空對象去調(diào)用方法產(chǎn)生行為。假如程序中使用了空對象,程序在運行時會出現(xiàn)異常:NullPointerException。由于對象是動態(tài)地分配實體,所以Java的編譯器對空對象不做檢查。因此,在編寫程序時要避免使用空對象。
返回Java具有“垃圾收集”機制,Jav4.5成員變量
用關鍵字static修飾的成員變量稱作靜態(tài)變量或類變量,而沒有使用static修飾的成員變量稱作實例變量。例如,下述A類中,x是實例變量,而y是類變量。classA{floatx;staticinty;}類變量是與類相關聯(lián)的數(shù)據(jù)變量,也就是說,類變量是和該類所創(chuàng)建的所有對象相關聯(lián)的變量,改變其中一個對象的這個類變量就同時改變了其它對象的這個類變量。4.5成員變量用關鍵字stati因此,類變量不僅可以通過某個對象訪問也可以直接通過類名訪問。實例變量僅僅是和相應的對象關聯(lián)的變量,也就是說,不同對象的實例變量互不相同,即分配不同的內(nèi)存空間,改變其中一個對象的實例變量不會影響其它對象的這個實例變量。實例變量必須通過對象訪問。下面例子2中,兩個“Lader”對象共享bottom。效果如圖4.7
因此,類變量不僅可以通過某個對象訪問也電子教案第4章課件2.常量如果一個成員變量修飾為final,就是常量,常量的名字習慣用大寫字母,例如:finalintMAX;final修飾的成員變量不占用內(nèi)存,這意味著在聲明final成員變量時,必須要初始化。對于final修飾的成員變量,對象可以操作使用,但不能做更改操作。下面的例子給出了常量的用法。效果如圖4.9
2.常量返回返回4.6方法
我們已經(jīng)知道,類體內(nèi)容可以有2種類型的成員:成員變量和方法。其中一部分方法稱作構造方法,供類創(chuàng)建對象時使用,用來給出類所創(chuàng)建的對象的初始狀態(tài)。另一部分方法可分為實例方法和類方法,類所創(chuàng)建的對象可以調(diào)用這些方法形成一定的算法,體現(xiàn)對象具有某種功能。當對象調(diào)用方法時,方法中出現(xiàn)的成員變量就是指分配給該對象的成員變量。對象不可以調(diào)用構造方法,構造方法是專門用來創(chuàng)建對象的。方法的定義包括兩部分:方法聲明和方法體。一般格式為:4.6方法我們已經(jīng)知道,類體方法聲明部分{
方法體的內(nèi)容}1.方法聲明和方法體最基本的方法聲明包括方法名和方法的返回類型,返回類型也簡稱作方法的類型。如:floatarea(){….}方法聲明部分方法的名字必須符合標識符規(guī)定。在給方法起名字時應遵守以下習慣:名字如果使用拉丁字母,首寫字母使用小寫。如果由多個單詞組成,從第2個單詞開始的其它單詞的首寫字母使用大寫。例如floatgetTrangleArea()voidsetCircleRadius(doubleradius)等。
方法聲明之后的一對大括號“{”、“}”以及之間的內(nèi)容稱作方法的方法體。類中的方法必須要有方法體,如果方法的類型是void類型,方法體中也可以不書寫任何語句。
方法的名字必須符合標識符規(guī)定。在給方2.方法體的構成方法體的內(nèi)容包括變量的定義和合法的Java語句,在方法體中聲明的變量以及方法的參數(shù)稱作局部變量,局部變量僅僅在該方法內(nèi)有效。方法的參數(shù)在整個方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開始有效。寫一個方法和C語言中寫一個函數(shù)完全類似,只不過在這里稱作方法。局部變量的名字必須符合標識符規(guī)定,遵守習慣:名字如果使用拉丁字母,首寫字母使用小寫。如果由多個單詞組成,從第2個單詞開始的其它單詞的首寫字母使用大寫。
2.方法體的構成
3.實例方法與類方法除構造方法外,其他的方法可分為實例方法或類方法。方法聲明中用關鍵字static修飾的稱作類方法或靜態(tài)方法,不用static修飾的稱作實例方法。一個類中的方法可以互相調(diào)用:實例方法可以調(diào)用該類中實例方法或類方法;類方法只能調(diào)用該類的類方法,不能調(diào)用實例方法;如:A類中的max方法和getMaxSqrt方法是類方法;sum和min方法是實例方法。
3.實例方法與類方法
實例方法可以操作成員變量,無論是實例變量或類變量;而類方法只能操作類變量不能操作實例變量,也就是說類方法中不能有操作實例變量的語句。二者為何有著這樣的區(qū)別呢?(1)實例方法必須通過對象來調(diào)用(2)類方法可以通過類名調(diào)用無論類方法或?qū)嵗椒ǎ敱徽{(diào)用執(zhí)行時,方法中的局部變量才被分配內(nèi)存空間,方法調(diào)用完畢,局部變量即刻釋放所占的內(nèi)存。下面的例子4,通過類名調(diào)用類方法。實例方法可以操作成員變量,無論是實例變4.參數(shù)傳值當方法被調(diào)用時,如果方法有參數(shù),參數(shù)必須要實例化,即參數(shù)變量必須有具體的值。在Java中,方法的所有參數(shù)都是“傳值”的,也就是說,方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。如果向方法的int型參數(shù)x傳遞一個int值,那么參數(shù)x得到的值是傳遞值的拷貝。方法如果改變參數(shù)的值,不會影響向參數(shù)“傳值”的變量的值。(1)基本數(shù)據(jù)類型參數(shù)的傳值下面的例子5中,向一個方法的基本型參數(shù)傳值。效果如圖4.11
4.參數(shù)傳值電子教案第4章課件(2)引用類型參數(shù)的傳值Java的引用型數(shù)據(jù)包括我們以前學習過的對象、數(shù)組以及后面將要學習的接口。當參數(shù)是引用類型時,“傳值”傳遞的是變量的引用而不是變量所引用的實體。圖4.13引用類型參數(shù)的傳值如果改變參數(shù)變量所引用的實體,就會導致原變量的實體發(fā)生同樣的變化,因為,兩個引用型變量如果具有同樣的引用,就會用同樣的實體。但是,改變參數(shù)的引用不會影響向其傳值的變量的引用。下面的例子6向一個方法的引用型參數(shù)傳值。效果如圖4.13
(2)引用類型參數(shù)的傳值電子教案第4章課件在上述例子6中,tom調(diào)用方法f把對象jerry的引用“傳值”給參數(shù)a后,對象jerry和對象a就具有同樣的成員變量,即同樣實體。因此,jerry和a就具有同樣的功能,也就是說a調(diào)用方法產(chǎn)生的行為和jerry調(diào)用同一方法產(chǎn)生的行為完全相同。當對象a執(zhí)行a=null;后,a就不再有任何實體,變成一個空對象,如果再執(zhí)行:a.setLeg(100);就會引起NullPointerExcetion異常。但是,jerry的引用沒有發(fā)生任何變化,它依然引用著原來的實體,仍然可以調(diào)用方法產(chǎn)生行為。在下面的例子7中,“Cone”類在創(chuàng)建對象時,將一個“Circle”對象的引用“傳值”給“Cone”對象的“bottom”。效果如圖4.14
在上述例子6中,tom調(diào)用方法f把對返回返回4.7方法重載
方法重載是指一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。方法的返回類型和參數(shù)的名字不參與比較,也就是說,如果兩個方法的名字相同,即使類型不同,也必須保證參數(shù)不同。下面例子8Area類中getArea方法是一個重載方法。效果如圖4.15
4.7方法重載方法重載是指一個類返回返回4.8this關鍵字
this是Java的一個關鍵字,可以出現(xiàn)在實例方法和構造方法中,但不可以出現(xiàn)在類方法中。1.在構造方法中使用thisthis關鍵字可以出現(xiàn)在類的構造方法中,代表使用該構造方法所創(chuàng)建的對象。下述例子9中的構造方法中出現(xiàn)了this,表示該對象在構造自己時調(diào)用了方法cry()。2.在實例方法中使用thisthis關鍵字可以出現(xiàn)在類的實例方法中,代表使用該方法的當前對象。4.8this關鍵字thi我們已經(jīng)知道,實例方法可以操作成員變量。實際上,當成員變量在實例方法中出現(xiàn)時,默認的格式是:this.成員變量;意思是當前對象的成員變量,如:classA{intx;voidf(){this.x=100;}}我們已經(jīng)知道,實例方法可以操作成員變量。實在上述A類中的實例方法f中出現(xiàn)了this,this就代表使用f的當前對象。所以,this.x就表示當前對象的變量x,當對象調(diào)用方法f時,將100賦給該對象的變量x。因此,當一個對象調(diào)用方法時,方法中的成員變量就是指分配給該對象的成員變量。因此,通常情況下,可以省略成員變量名字前面的“this.”。我們知道類的實例方法可以調(diào)用類的其它方法,調(diào)用的默認格式是:this.方法;在上述A類中的實例方法f中出現(xiàn)了t
如:在上述B類中的方法f中出現(xiàn)了this,this代表使用方法f的當前對象,所以,方法f的方法體中this.g()就是當前對象調(diào)用方法g,也就是說,當某個對象調(diào)用方法f過程中,又調(diào)用了方法g。由于這種邏輯關系非常明確,一個方法調(diào)用另一個方法時可以省略方法名字前面的“this.”。3.類方法中不可以使用thisthis不能出現(xiàn)在類方法中,這是因為,類方法可以通過類名直接調(diào)用,這時,可能還沒有任何對象誕生。
如:在上述B類中的方法f中出現(xiàn)了t
4.使用this區(qū)分成員變量和局部變量我們已經(jīng)知道,成員變量在整個類內(nèi)有效,局部變量僅在方法內(nèi)有效。在方法體中聲明的變量以及方法的參數(shù)稱作局部變量,方法的參數(shù)在整個方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開始有效。如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即這個成員變量在這個方法內(nèi)暫時失效。如:這時如果想在該方法內(nèi)使用成員變量,成員變量前面的“this.”就不可以省略,如:this.sideA、this.sideB、this.sideC就分別表示當前對象的成員變量sideA、sideB、sideC。返回4.使用this區(qū)分成員變量和局部變量返回4.9包
通過關鍵字package聲明包語句。package語句作為Java源文件的第一條語句,指明該源文件定義的類所在的包。package語句的一般格式為:package包名;如果源程序中省略了package語句,源文件中所定義命名的類被隱含地認為是無名包的一部分,即源文件中定義命名的類在同一個包中,但該包沒有名字。包名可以是一個合法的標識符,也可以是若干個標識符加“.”分割而成,如:packagesunrise;package;4.9包通過關鍵字packa
程序如果使用了包語句,例如:packagetom.jiafei;那么你的目錄結構必須包含有如下的結構…\tom\jiafei比如c:\1000\tom\jiafei并且要將源文件編譯后得到的全部字節(jié)碼文件拷貝到目錄c:\1000\tom\jiafei中,如果你事先將源文件保存到c:\1000\tom\jiafei中,然后編譯源文件,那么生成的字節(jié)碼文件就直接保存到當前目錄中了,如:c:\1000\tom\jiafei\javac源文件我們將下述例子10的源文件保存到c:\1000\tom\jiafei。效果如圖4.17
程序如果使用了包語句,例如:電子教案第4章課件然后編譯原文件:c:\1000\tom\jiafei\javacExample.java運行程序時必須到tom\jiafei的上一層目錄1000中來運行,如:c:\1000\javatom.jiafei.Example因為起了包名,類Example的全名已經(jīng)是:tom.jiafei.Example(就好比大連的全名是:“中國.遼寧.大連”)。
包名應該避免與其他包名沖突。但要做到這一點似乎很困難,如果你的包需要在全世界是唯一的,Sun公司建議大家使用自己所在公司的Internet域名倒置后做包名,例如,將域名“”的倒置“.sina”做包名。
然后編譯原文件:2.使用參數(shù)“–d”編譯源文件
javac可以使用參數(shù)-d指定生成的字節(jié)嗎文件所在的目錄。如果不使用參數(shù)-d,javac在當前目錄生成字節(jié)碼文件。如果源文件沒有包名,使用參數(shù)-d可以將字節(jié)碼文件存放到你指定的有效目錄中,例如:javac–dF:\tsinghua\1000MyFile.java將源文件MyFile.java生成的全部字節(jié)碼文件存放到F:\tsinghua\1000。如果源文件使用包語句聲明了包名,使用參數(shù)-d時要格外小心。假設源文件的包名是tom.jiafei,保存在在D:\2000中,2.使用參數(shù)“–d”編譯源文件
下述編譯命令:D:\2000\javac–dF:\tsinghua\1000MyFile.java會在F:\tsinghua\1000目錄下新建子目錄結構tom\jiafe并將字節(jié)碼文件存放到F:\tsinghua\1000\tom\jiafei中。
而下述編譯命令:D:\2000\javac–d.MyFile.java(Jcreator默認方式)會在當前目錄2000下新建子目錄結構tom\jiafei,并將字節(jié)碼文件存放到D:\2000\tom\jiafei中。返回下述編譯命令:返回4.10import語句
使用import語句可以引入包中的類。在編寫源文件時,除了自己編寫類外,我們經(jīng)常需要使用Java提供的許多類,這些類可能在不同的包中。在學習Java語言時,使用已經(jīng)存在的類,避免一切從頭做起,這是面向?qū)ο缶幊痰囊粋€重要方面。1.使用類庫中的類為了能使用Java提供給我們的類,我們可以使用import語句來引入包中類。在一個Java源程序中可以有多個import語句,它們必須寫在package語句(假如有package語句的話)和源文件中類的定義之間.。
4.10import語句使用Java為我們提供了大約130多個包,如:java.applet包含所有的實現(xiàn)Javaapplet的類java.awt包含抽象窗口工具集中的圖形、文本、窗口GUI類java.awt.image包含抽象窗口工具集中的圖像處理類java.lang包含所有的基本語言類java.io包含所有的輸入輸出類
包含所有實現(xiàn)網(wǎng)絡功能的類java.until包含有用的數(shù)據(jù)類型類Java為我們提供了大約130多個包,如:如果使用import語句引入了整個包中的類,那么可能會增加編譯時間。但絕對不會影響程序運行的性能。Java運行平臺由所需要的Java類庫和虛擬機組成,這些類庫被包含在一個jre\lib中的壓縮文件rt.jar中,當程序執(zhí)行時,Java運行平臺從類庫中加載程序真正使用的類字節(jié)碼到內(nèi)存。下面的例子11使用了java.util包中的Date類,用來顯示本機的當前時間。
如果使用import語句引入了整個包中的2.使用自定義包中的類我們也可以使用import語句引入自定義包中的類。如:importtom.jiafei.*;我們也可以對單獨的一個類進行編譯,生成字節(jié)碼文件然后供其它類使用。以下的源文件SquareEquation.java只有一個類組成,這個類可以被其它的程序引入使用,該源文件的包名是tom.jiafei。為了使程序能使用tom.jiafei包中的類,我們必須在classpath中指明我們包的位置,假設tom.jiafei的位置是:c:\2000,即在c:\2000下有子目錄tom\jiafei。更新classpath的設置,在命令行執(zhí)行如下命令:setclasspath=E:\jdk1.5\jre\lib\rt.jar;.;c:\20002.使用自定義包中的類也可以將上述命令添加到Classpath值中。在Windows2000系統(tǒng)中,右擊“我的電腦”,彈出快捷菜單,然后選擇“屬性”命令,彈出“系統(tǒng)特性”對話框,再單擊該對話框中的高級選項,然后單擊“環(huán)境變量”按鈕。對于Win9x系統(tǒng)可以將上述命令寫到autoexec.bat文件中。將下述源文件SquareEquation.java編譯得到的字節(jié)碼文件拷貝到c:\2000\tom\jiafei中。下面的例子12的源文件保存在c:\like目錄中,并用import語句引入包tom.jiafei中的SquareEquation類。
也可以將上述命令添加到Classpat3.使用無名包中的類我們也可以使用無名包中的類。假如上述SquareEquation.java源文件中沒有使用包語句,如果一個程序使用SquareEquation類,可以將該類的字節(jié)碼文件存放在當前程序所在的目錄中。
編寫一個有價值的類是令人高興的事情,你可以將這樣的類打包,形成有價值的“軟件產(chǎn)品”,供其他軟件開發(fā)者使用。4.避免類名混淆Java運行環(huán)境總是先到程序所在目錄中尋找程序所使用的類,然后加載到內(nèi)存。3.使用無名包中的類如果在當前目錄沒有發(fā)現(xiàn)所需要的類,就到import語句所指的包中查找。如果在當前目錄中尋找到了要加載的類,那么程序就不會再加載import語句引入的同名類。我們將下列源文件的字節(jié)碼和應用程序存放在同一目錄中。首先將下列的SquareEquation.java編譯通過,并將得到的字節(jié)碼拷貝到D:\test中。下面的例子13中的源文件也存放在D:\test中,該源文件又引入了前述tom.jiafei包中的SquareEquation類。上述程序中,實際加載使用的是當前目錄中D:\test中的SquareEquation類,tom.jiafei包中的SquareEquation類并沒有被加載使用。返回如果在當前目錄沒有發(fā)現(xiàn)所需要的類,就到4.11訪問權限
類有2種重要的成員:成員變量和方法。類創(chuàng)建的對象可以通過“.”運算符訪問分配給自己的變量,也可以通過“.”運算符調(diào)用類中的實例方法和類方法。類在定義聲明成員變量和方法時,可以用關鍵字private、protected和public來說明成員變量和方法的訪問權限,使得對象訪問自己的變量和使用方法受到一定的限制。1.私有變量和私有方法用關鍵字private修飾的成員變量和方法被稱為私有變量和私有方法。對于私有成員變量或方法,只有在本類中創(chuàng)建該類的對象時,這個對象才能訪問自己的私有成員變量和類中的私有方法,如例子14所示。效果如圖4.21
4.11訪問權限類有2電子教案第4章課件
2.共有變量和共有方法用public修飾的成員變量和方法被稱為共有變量和共有方法,如:classA{publicfloatweight;//weight被修飾為public的float型變量。publicfloatf(floata,floatb)//方法f是public方法。{}}2.共有變量和共有方法
當我們在任何一個類中用類A創(chuàng)建了一個對象后,該對象能訪問自己的public變量和類中的public方法。如:classB{voidg(){Aa=newA();a.weight=23f;//合法。a.f(3,4);//合法。}}當我們在任何一個類中用類A創(chuàng)建了3.友好變量和友好方法不用private、public、protected修飾符的成員變量和方法被稱為友好變量和友好方法,如:classA{floatweight;//weight是友好的float型變量。floatf(floata,floatb)//方法f是友好方法。{}}3.友好變量和友好方法假如B與A是同一個包中的類,那么,下述B類中的a.weight、a.f(3,4)都是合法的。classB{voidg(){Acat=newA();a.weight=23f;//合法。a.f(3,4);//合法。}}假如B與A是同一個包中的類,那么,下述B4.受保護的成員變量和方法用protected修飾的成員變量和方法被稱為受保護的成員變量和受保護的方法,如:classA{protectedfloatweight;//weight被修飾為public的float型變量。protectedfloatf(floata,floatb)//方法f是public方法。{}}4.受保護的成員變量和方法
假如B與A是同一個包中的類,那么,B類中的a.weight、a.f(3,4)都是合法的。classB{voidg(){Toma=newTom();a.weight=23f;//合法。a.f(3,4);//合法。}}
假如B與A是同一個包中的類,那么,B類
5.public類與友好類類聲明時,如果關鍵字class前面加上public關鍵字,就稱這樣的是一個public類,不能用protected和private修飾類。如:publicclassA{……}可以在任何另外一個類中,使用public類創(chuàng)建對象。如果一個類不加public修飾,如:classA{……}5.public類與友好類6.關于構造方法private、public、protected修飾符的意義也同樣適合于構造方法。如果一個類沒有明確地聲明構造方法,那么public類的默認構造方法是public的,友好類的默認構造方法是友好的。需要注意的是,如果一個public類定義聲明的構造方法中沒有public的,那么在另外一個類中使用該類創(chuàng)建對象時,使用的構造方法就不是public的,創(chuàng)建對象就受到一定的限制。假設對象a是A類創(chuàng)建的,我們把對象對成員的訪問權限總結在下表4.1中表4.1對象訪問成員6.關于構造方法對象a的位置private成員友好成員protected成員public成員在類A中,a訪問成員允許允許允許允許在與A同包的另外一個類中a訪問成員不允許允許允許允許在與A不同包的另外一個類中a訪問成員不允許不允許不允許允許返回對象a的位置private成員友好成員protected成員4.12基本類型數(shù)據(jù)的類包裝
Java的基本數(shù)據(jù)類型包括:byte、int、short、long、float、double、char。Java同時也提供了基本數(shù)據(jù)類型相關的類,實現(xiàn)了對基本數(shù)據(jù)類型的封裝。這些類在java.lang包中,分別是:Byte、Integer、Short、Long、Float、Double和Character類。
.1.Double和Float類Double類和Float類實現(xiàn)了對double和float基本型數(shù)據(jù)的類包裝??梢允褂肈ouble類的構造方法:4.12基本類型數(shù)據(jù)的類包裝Java的基本數(shù)據(jù)類Double(doublenum)創(chuàng)建一個Double類型的對象;使用Float類的構造方法:Float(floatnum)創(chuàng)建一個Float類型的對象。Double對象調(diào)用doubleValue()方法可以返回該對象含有的double型數(shù)據(jù);Float對象調(diào)用floatValue()方法可以返回該對象含有的float型數(shù)據(jù)。Byte、Integer、Short和Long對象分別調(diào)用byteValue()、intValue()、shortValue()和longValue()方法可以返回該對象含有的基本型數(shù)據(jù)。
Double(doublenum)
3.Character類Character類實現(xiàn)了對char基本型數(shù)據(jù)的類包裝。可以使用Character類的構造方法:Character(charc)創(chuàng)建一個Character類型的對象。Character對象調(diào)charValue()方法可以返回該對象含有的char型數(shù)據(jù)。Character類還包括一些類方法,這些方法可以直接通過類名調(diào)用,用來進行字符分類,比如判斷一個字符是否是數(shù)字字符或改變一個字符的大小寫等。Character類中的一些常用類方法:
l
publicstaticbooleanisDigit(charch)如果ch是數(shù)字字符方法返回true,否則返回false。l
publicstaticbooleanisLetter(charch)如果ch是字母方法返回true,否則返回false。l
publicstaticbooleanisLetterOrDigit(charch)如果ch是數(shù)字字符或字母方法返回true,否則返回false。lpublicstaticbooleanisLowerCase(charch)如果ch是小寫字母方法返回true,否則返回false。
lpublicstaticbooleanisDigil
publicstaticbooleanisUpperCase(charch)如果ch是大寫字母方法返回true,否則返回false。l
publicstaticchartoLowerCase(charch)返回ch的小寫形式。l
publicstaticchartoUpperCase(charch)返回ch的大寫形式。lpublicstaticbooleanisSpaceChar(charch)如果ch是空格返回true。
lpublicstaticbooleanisUppe圖4.22Character類的類方法在下面的例子15中,將一個字符數(shù)組中的小寫字母變成大寫字母,并將大寫字母變成小寫字母。
圖4.22Character類的類方法返回返回4.13反編譯和文檔生成器
使用SDK提供的反編譯器:javap.exe可以將字節(jié)碼反編譯為源碼,查看源碼類中的public方法名字和public成員變量的名字,例如:javapjava.awt.Button將列出Button中的public方法和public成員變量。下列命令javap–privaejava.awt.Button將列出Button中的全部方法和成員變量。
4.13反編譯和文檔生成器使用SDK使用SDK提供的javadoc.exe可以制做源文件類結構的html格式文檔。
假設D:\test有源文件:Example.java,用javadoc生成Example.java的html格式文擋:javadocExample.java這時在文件夾test中將生成若干個html文擋,查看這些文檔可以知道源文件中類的組成結構,如類中的方法和成員變量。使用javadoc時,也可以使用參數(shù)-d指定生成文擋所在的目錄,例如,avadoc–dF:\gxy\bookExample.java返回使用SDK提供的javadoc.exe可以
本章導讀1.類聲明和類體2.類體的構成3.構造方法與對象的創(chuàng)建4.對象的引用與實體5.成員變量6.方法第4章
類與對象本章導讀第4章類7.方法重載8.this關鍵字9.包10.import語句11.訪問權限12.基本類型數(shù)據(jù)的類包裝13.反編譯和文檔生成器7.方法重載4.1類聲明和類體
類是組成Java程序的基本要素。類封裝了一類對象的狀態(tài)和方法。類是用來定義對象的模板。可以用類創(chuàng)建對象,當使用一個類創(chuàng)建了一個對象時,我們也說給出了這個類的一個實例。在語法上,類由兩部分構成:類聲明和類體?;靖袷綖椋篶lass類名{類體的內(nèi)容……}4.1類聲明和類體類是組成class是關鍵字,用來定義類?!癱lass類名”是類的聲明部分,類名必須是合法的Java標識符。兩個大括號“{”、“}”以及之間的內(nèi)容稱作類體。
以下是兩個類聲明的例子。classDog{…}class機動車
{…}class是關鍵字,用來定義類。“clas類的名字不能是Java中的關鍵字,要符合標識符規(guī)定,即名字可以由字母、下劃線、數(shù)字或美元符號組成,并且第一個字符不能是數(shù)字。但給類命名時,最好遵守下列習慣:(1)如果類名使用拉丁字母,那么名字的首字母使用大寫字母,如Hello、Time、,People等。(2)類名最好容易識別、見名知意。當類名由幾個“單詞”復合而成時,每個單詞的首寫字母使用大寫,如BeijingTime、AmericanGame、HelloChina等。
返回類的名字不能是Java中的關鍵字,要符合4.2類體的構成
類體內(nèi)容可以有2種類型的成員:1.成員變量:通過變量聲明定義的變量,稱作成員變量或域,用來刻畫類創(chuàng)建的對象的屬性。將在后面的第3節(jié)詳細地討論成員變量。2.方法:方法是類體的重要成員之一。其中的構造方法是具有特殊地位的方法,供類創(chuàng)建對象時使用,用來給出類所創(chuàng)建的對象的初始狀態(tài),另一類方法,可以由類所創(chuàng)建的對象調(diào)用,對象調(diào)用這些方法操作成員變量形成一定的算法,體現(xiàn)對象具有某種功能。4.2類體的構成類體內(nèi)容可以有2種類型的成員:
下面是一個類名為“機動車”的類,類體內(nèi)容的變量定義部分定義了2個float類型的變量:“weight”、“height”和一個int型變量“speed”;方法定義部分定義了3個方法:“changSpeed”、“getWeight”和“getHeight”。成員變量的類型可以是Java中的任何一種數(shù)據(jù)類型,包括前面學習過的基本類型:整型、浮點型、字符型、數(shù)組以及后面要學習的對象及接口。成員變量在整個類內(nèi)都有效,與它在類體中書寫的先后位置無關,例如,前述的機動車類也可以寫成:
下面是一個類名為“機動車”的類,類體內(nèi)容的變
在定義類的成員變量時可以同時賦予初值,表明類所創(chuàng)建的對象的初始狀態(tài)。需要注意的是。對成員變量的操作只能放在方法中,方法可以對成員變量進行操作形成算法,如:但是不可以這樣做:因為,a=12是賦值語句,不是數(shù)據(jù)的聲明。類的成員類型中可以有數(shù)據(jù)和方法,即數(shù)據(jù)的定義和方法的定義,但沒有語句,語句必須放在方法中。
返回在定義類的成員變量時可以同時賦予初值,表明4.3構造方法與對象的創(chuàng)建
類中有一部分方法稱作構造方法,類創(chuàng)建對象時需使用構造方法,以便給類所創(chuàng)建的對象一個合理的初始狀態(tài)。構造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,并且不返回任何數(shù)據(jù)類型,即它是void型,但void必須省略不寫。Java允許一個類中有若干個構造方法,但這些構造方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。下面的Rect類有兩個構造方法:
4.3構造方法與對象的創(chuàng)建類中有一部分方當使用一個類創(chuàng)建了一個對象時,我們也說給出了這個類的一個實例。創(chuàng)建一個對象包括對象的聲明和為對象分配成員變量兩個步驟。1.對象的聲明。一般格式為:類的名字
對象名字;如:RectrectangleOne;
當使用一個類創(chuàng)建了一個對象時,我們也說給2.為聲明的對象分配成員變量使用new運算符和類的構造方法為聲明的對象分配成員變量,如果類中沒有構造方法,系統(tǒng)會調(diào)用默認的構造方法(默認的構造方法是無參數(shù)的,你一定還記得構造方法的名字必須和類名相同這一規(guī)定),上述的Rect類提供了2個構造方法,下面都是合法的創(chuàng)建對象的語句:rectangleOne=newRect();或rectangleOne=newRect(10,20);2.為聲明的對象分配成員變量如果類里定義了一個或多個構造方法,那么Java不提供默認的構造方法。如果上述Rect只提供一個帶參數(shù)的構造方法,代碼:rectangleOne=newRect();創(chuàng)建對象是非法的。創(chuàng)建對象的代碼:
rectangleOne=newRect(10,20);會實現(xiàn)下述兩件事:(1)為成員變量分配內(nèi)存空間,然后執(zhí)行構造方法中的語句。(2)給出一個信息,已確保這些成員變量是屬于對象rectangleOne的。如果類里定義了一個或多個構造方法,那創(chuàng)建對象就是指為它分配成員變量,并獲得一個引用,以確保這些成員變量由它來“操作管理”。為對象分配成員變量后,內(nèi)存模型由聲明對象時的模型圖4.1,變成如圖4.2所示,箭頭示意對象可以操作這些屬于自己的成員變量。圖4.2分配實體后的對象sideBsideA
20
100xAA11RectangleOne創(chuàng)建對象就是指為它分配成員變量,并獲得3.創(chuàng)建多個不同的對象一個類通過使用new運算符可以創(chuàng)建多個不同的對象,這些對象將被分配不同的內(nèi)存空間,因此,改變其中一個對象的狀態(tài)不會影響其它對象的狀態(tài)。例如,我們使用前面的Rect類創(chuàng)建兩個對象:rectangleOne、rectangleTwo。rectangleOne=newRect(10,20);rectangleTwo=newRect(33,66);當創(chuàng)建對象rectangleOne時,Rect類中的成員變量sizeA、sizeB被分配內(nèi)存空間,并返回一個引用給ectangleOne;
3.創(chuàng)建多個不同的對象當再創(chuàng)建一個對象rectangleTwo時,Rect類中的成員變量sizeA、sizeB再一次被分配內(nèi)存空間,并返回一個引用給rectangleTwo。內(nèi)存模型如圖4.3所示。
sideBsideA
20
100xAA11rectangleOne圖4.3創(chuàng)建多個對象sideBsideA
66
330xBB42rectangleTwo當再創(chuàng)建一個對象rectangleT4.使用對象對象不僅可以操作自己的變量改變狀態(tài),而且還擁有了使用創(chuàng)建它的那個類中的方法的能力,對象通過使用這些方法可以產(chǎn)生一定的行為。通過使用運算符“.”,對象可以實現(xiàn)對自己的變量訪問和方法的調(diào)用。(1)對象操作自己的變量(對象的屬性)(2)對象調(diào)用類中的方法(對象的功能)下面例子1中,“Lader”類創(chuàng)建了2個對象:laderOne,laderTwo。
返回4.使用對象返回4.4對象的引用與實體
我們已經(jīng)知道,當用類創(chuàng)建一個對象時,成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱做該對象的實體或變量,而對象中存放著引用,以確保這些變量由該對象操作使用。因此,如果兩個對象有相同的引用,那么就具有同樣的實體。假如使用例子1“Lader”類的構造方法創(chuàng)建了兩個對象t1,t2。t1=newLader(11,22,33);t2=newLader(6,12,18);4.4對象的引用與實體我們
Java具有“垃圾收集”機制,Java的運行環(huán)境周期地檢測某個實體是否已不再被任何對象所引用,如果發(fā)現(xiàn)這樣的實體,就釋放實體占有的內(nèi)存。因此,Java編程人員不必象C++程序員那樣,要時刻自己檢查哪些對象應該釋放內(nèi)存。當把變量t2中存放的引用賦給t1后,最初分配給對象t1的成員變量(實體)所占有的內(nèi)存就會被釋放。沒有實體的對象稱作空對象??諏ο蟛荒苁褂?,即不能讓一個空對象去調(diào)用方法產(chǎn)生行為。假如程序中使用了空對象,程序在運行時會出現(xiàn)異常:NullPointerException。由于對象是動態(tài)地分配實體,所以Java的編譯器對空對象不做檢查。因此,在編寫程序時要避免使用空對象。
返回Java具有“垃圾收集”機制,Jav4.5成員變量
用關鍵字static修飾的成員變量稱作靜態(tài)變量或類變量,而沒有使用static修飾的成員變量稱作實例變量。例如,下述A類中,x是實例變量,而y是類變量。classA{floatx;staticinty;}類變量是與類相關聯(lián)的數(shù)據(jù)變量,也就是說,類變量是和該類所創(chuàng)建的所有對象相關聯(lián)的變量,改變其中一個對象的這個類變量就同時改變了其它對象的這個類變量。4.5成員變量用關鍵字stati因此,類變量不僅可以通過某個對象訪問也可以直接通過類名訪問。實例變量僅僅是和相應的對象關聯(lián)的變量,也就是說,不同對象的實例變量互不相同,即分配不同的內(nèi)存空間,改變其中一個對象的實例變量不會影響其它對象的這個實例變量。實例變量必須通過對象訪問。下面例子2中,兩個“Lader”對象共享bottom。效果如圖4.7
因此,類變量不僅可以通過某個對象訪問也電子教案第4章課件2.常量如果一個成員變量修飾為final,就是常量,常量的名字習慣用大寫字母,例如:finalintMAX;final修飾的成員變量不占用內(nèi)存,這意味著在聲明final成員變量時,必須要初始化。對于final修飾的成員變量,對象可以操作使用,但不能做更改操作。下面的例子給出了常量的用法。效果如圖4.9
2.常量返回返回4.6方法
我們已經(jīng)知道,類體內(nèi)容可以有2種類型的成員:成員變量和方法。其中一部分方法稱作構造方法,供類創(chuàng)建對象時使用,用來給出類所創(chuàng)建的對象的初始狀態(tài)。另一部分方法可分為實例方法和類方法,類所創(chuàng)建的對象可以調(diào)用這些方法形成一定的算法,體現(xiàn)對象具有某種功能。當對象調(diào)用方法時,方法中出現(xiàn)的成員變量就是指分配給該對象的成員變量。對象不可以調(diào)用構造方法,構造方法是專門用來創(chuàng)建對象的。方法的定義包括兩部分:方法聲明和方法體。一般格式為:4.6方法我們已經(jīng)知道,類體方法聲明部分{
方法體的內(nèi)容}1.方法聲明和方法體最基本的方法聲明包括方法名和方法的返回類型,返回類型也簡稱作方法的類型。如:floatarea(){….}方法聲明部分方法的名字必須符合標識符規(guī)定。在給方法起名字時應遵守以下習慣:名字如果使用拉丁字母,首寫字母使用小寫。如果由多個單詞組成,從第2個單詞開始的其它單詞的首寫字母使用大寫。例如floatgetTrangleArea()voidsetCircleRadius(doubleradius)等。
方法聲明之后的一對大括號“{”、“}”以及之間的內(nèi)容稱作方法的方法體。類中的方法必須要有方法體,如果方法的類型是void類型,方法體中也可以不書寫任何語句。
方法的名字必須符合標識符規(guī)定。在給方2.方法體的構成方法體的內(nèi)容包括變量的定義和合法的Java語句,在方法體中聲明的變量以及方法的參數(shù)稱作局部變量,局部變量僅僅在該方法內(nèi)有效。方法的參數(shù)在整個方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開始有效。寫一個方法和C語言中寫一個函數(shù)完全類似,只不過在這里稱作方法。局部變量的名字必須符合標識符規(guī)定,遵守習慣:名字如果使用拉丁字母,首寫字母使用小寫。如果由多個單詞組成,從第2個單詞開始的其它單詞的首寫字母使用大寫。
2.方法體的構成
3.實例方法與類方法除構造方法外,其他的方法可分為實例方法或類方法。方法聲明中用關鍵字static修飾的稱作類方法或靜態(tài)方法,不用static修飾的稱作實例方法。一個類中的方法可以互相調(diào)用:實例方法可以調(diào)用該類中實例方法或類方法;類方法只能調(diào)用該類的類方法,不能調(diào)用實例方法;如:A類中的max方法和getMaxSqrt方法是類方法;sum和min方法是實例方法。
3.實例方法與類方法
實例方法可以操作成員變量,無論是實例變量或類變量;而類方法只能操作類變量不能操作實例變量,也就是說類方法中不能有操作實例變量的語句。二者為何有著這樣的區(qū)別呢?(1)實例方法必須通過對象來調(diào)用(2)類方法可以通過類名調(diào)用無論類方法或?qū)嵗椒?,當被調(diào)用執(zhí)行時,方法中的局部變量才被分配內(nèi)存空間,方法調(diào)用完畢,局部變量即刻釋放所占的內(nèi)存。下面的例子4,通過類名調(diào)用類方法。實例方法可以操作成員變量,無論是實例變4.參數(shù)傳值當方法被調(diào)用時,如果方法有參數(shù),參數(shù)必須要實例化,即參數(shù)變量必須有具體的值。在Java中,方法的所有參數(shù)都是“傳值”的,也就是說,方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。如果向方法的int型參數(shù)x傳遞一個int值,那么參數(shù)x得到的值是傳遞值的拷貝。方法如果改變參數(shù)的值,不會影響向參數(shù)“傳值”的變量的值。(1)基本數(shù)據(jù)類型參數(shù)的傳值下面的例子5中,向一個方法的基本型參數(shù)傳值。效果如圖4.11
4.參數(shù)傳值電子教案第4章課件(2)引用類型參數(shù)的傳值Java的引用型數(shù)據(jù)包括我們以前學習過的對象、數(shù)組以及后面將要學習的接口。當參數(shù)是引用類型時,“傳值”傳遞的是變量的引用而不是變量所引用的實體。圖4.13引用類型參數(shù)的傳值如果改變參數(shù)變量所引用的實體,就會導致原變量的實體發(fā)生同樣的變化,因為,兩個引用型變量如果具有同樣的引用,就會用同樣的實體。但是,改變參數(shù)的引用不會影響向其傳值的變量的引用。下面的例子6向一個方法的引用型參數(shù)傳值。效果如圖4.13
(2)引用類型參數(shù)的傳值電子教案第4章課件在上述例子6中,tom調(diào)用方法f把對象jerry的引用“傳值”給參數(shù)a后,對象jerry和對象a就具有同樣的成員變量,即同樣實體。因此,jerry和a就具有同樣的功能,也就是說a調(diào)用方法產(chǎn)生的行為和jerry調(diào)用同一方法產(chǎn)生的行為完全相同。當對象a執(zhí)行a=null;后,a就不再有任何實體,變成一個空對象,如果再執(zhí)行:a.setLeg(100);就會引起NullPointerExcetion異常。但是,jerry的引用沒有發(fā)生任何變化,它依然引用著原來的實體,仍然可以調(diào)用方法產(chǎn)生行為。在下面的例子7中,“Cone”類在創(chuàng)建對象時,將一個“Circle”對象的引用“傳值”給“Cone”對象的“bottom”。效果如圖4.14
在上述例子6中,tom調(diào)用方法f把對返回返回4.7方法重載
方法重載是指一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。方法的返回類型和參數(shù)的名字不參與比較,也就是說,如果兩個方法的名字相同,即使類型不同,也必須保證參數(shù)不同。下面例子8Area類中getArea方法是一個重載方法。效果如圖4.15
4.7方法重載方法重載是指一個類返回返回4.8this關鍵字
this是Java的一個關鍵字,可以出現(xiàn)在實例方法和構造方法中,但不可以出現(xiàn)在類方法中。1.在構造方法中使用thisthis關鍵字可以出現(xiàn)在類的構造方法中,代表使用該構造方法所創(chuàng)建的對象。下述例子9中的構造方法中出現(xiàn)了this,表示該對象在構造自己時調(diào)用了方法cry()。2.在實例方法中使用thisthis關鍵字可以出現(xiàn)在類的實例方法中,代表使用該方法的當前對象。4.8this關鍵字thi我們已經(jīng)知道,實例方法可以操作成員變量。實際上,當成員變量在實例方法中出現(xiàn)時,默認的格式是:this.成員變量;意思是當前對象的成員變量,如:classA{intx;voidf(){this.x=100;}}我們已經(jīng)知道,實例方法可以操作成員變量。實在上述A類中的實例方法f中出現(xiàn)了this,this就代表使用f的當前對象。所以,this.x就表示當前對象的變量x,當對象調(diào)用方法f時,將100賦給該對象的變量x。因此,當一個對象調(diào)用方法時,方法中的成員變量就是指分配給該對象的成員變量。因此,通常情況下,可以省略成員變量名字前面的“this.”。我們知道類的實例方法可以調(diào)用類的其它方法,調(diào)用的默認格式是:this.方法;在上述A類中的實例方法f中出現(xiàn)了t
如:在上述B類中的方法f中出現(xiàn)了this,this代表使用方法f的當前對象,所以,方法f的方法體中this.g()就是當前對象調(diào)用方法g,也就是說,當某個對象調(diào)用方法f過程中,又調(diào)用了方法g。由于這種邏輯關系非常明確,一個方法調(diào)用另一個方法時可以省略方法名字前面的“this.”。3.類方法中不可以使用thisthis不能出現(xiàn)在類方法中,這是因為,類方法可以通過類名直接調(diào)用,這時,可能還沒有任何對象誕生。
如:在上述B類中的方法f中出現(xiàn)了t
4.使用this區(qū)分成員變量和局部變量我們已經(jīng)知道,成員變量在整個類內(nèi)有效,局部變量僅在方法內(nèi)有效。在方法體中聲明的變量以及方法的參數(shù)稱作局部變量,方法的參數(shù)在整個方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年旬陽縣數(shù)學三上期末檢測試題含解析
- 七年級 生物學緒論1課件
- 理論結合實踐的衛(wèi)生資格考試試題及答案
- 明晰2025年大學語文考試知識框架試題及答案
- 自考行政管理對策研究試題及答案
- 助力行政法學考試試題與答案
- 2025年執(zhí)業(yè)藥師復習計劃試題及答案
- 綜合解析經(jīng)濟法概論試題及答案
- 行政法學現(xiàn)場案例試題及答案
- 行政管理??普Z文考核試題及答案
- 2025年海淀高三二模語文試題及答案
- 06竣工財務決算審計工作底稿(試行)
- 工傷保險醫(yī)療費用智能審核系統(tǒng)建設
- 實驗--驗證動量守恒定律優(yōu)秀課件
- 鋼結構樓梯施工方案
- 劍橋少兒英語一級上冊Unit1-8測試卷
- 工程建設領域廉政風險防范示意圖
- 豌豆上公主PPT課件
- 艾滋病防治條例PPT課件
- 學生入團申請推薦表
- 當代教育心理學(陳琦劉儒德主編第二版)章節(jié)總結
評論
0/150
提交評論