OOP 03 第3章 類與對象-抽象與封裝的Java實現(xiàn)_第1頁
OOP 03 第3章 類與對象-抽象與封裝的Java實現(xiàn)_第2頁
OOP 03 第3章 類與對象-抽象與封裝的Java實現(xiàn)_第3頁
OOP 03 第3章 類與對象-抽象與封裝的Java實現(xiàn)_第4頁
OOP 03 第3章 類與對象-抽象與封裝的Java實現(xiàn)_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章類與對象--抽象與封裝的Java實現(xiàn)

提綱3.1抽象與封裝的實現(xiàn)技術(shù)3.2類(屬性成員、方法成員,構(gòu)造方法)3.3對象3.4訪問屬性控制3.5靜態(tài)成員3.6final、this和null修飾符態(tài)成員3.7對象拷貝3.8應(yīng)用舉例3.1抽象與封裝的實現(xiàn)技術(shù)

實現(xiàn)抽象和封裝——類和對象一個對象是的關(guān)注領(lǐng)域世界中特定實體在程序中的具體體現(xiàn),它包含了若干個成員變量和成員方法。成員變量反映實體的屬性狀態(tài),成員方法反映實體具有的行為能力,這些成員的規(guī)格描述將由類承擔(dān),類是對具有類似特征的對象的抽象說明,對象是類的實例。對象體的構(gòu)成………………繪制直線獲取屬性值設(shè)置屬性值成員方法(對象/類“線”的描述)示例:線classclassLine{//屬性集PointstartPoint,endPoint;//起點和終點ColorfrontColor;intwidth;//畫線的寬度LineStylelineStyle;//線的類型,虛線、雙線…//方法集voiddraw(Graphicsg);//在圖形設(shè)備g上畫出此線doublelength();//獲得此線的長度voidsetStartPoint(Pointp);PointgetStartPoint();…}3.2類

3.2.1類的定義

Java語言中,類主要有兩個來源途徑Java類庫

用戶自定義的類Object類是所有的類的超類。如果在自定義類時,沒有寫明父類,則默認(rèn)的父類為Object。從嚴(yán)格意義上講,Java程序中定義的所有類都是子類。最簡單的類定義格式為

classClassName{ ClassBody//類體}

class為關(guān)鍵字,ClassName為定義的類名稱ClassBody為類體,可包含成員變量、成員方法、內(nèi)部類、內(nèi)部接口、構(gòu)造方法、靜態(tài)初始化器

類的UML表示一個類的UML圖形表示如圖

一個Box類的UML表示

BOX類的UML表示Box類的定義

publicclassBox{intlength,width,height;voidsetLong(intlength

Value){length=lengthValue;}voidsetWidth(intwidthValue){width=widthValue;}voidsetHeight(intheightValue){height=heightValue;}voidsetBox(intlengthValue,intwidthValue,intheightValue){length=lengthValue;width=widthValue;height=heightValue;}intgetLength(){returnlength;}intgetWidth(){returnwidth;}intgetHeight(){returnheight;}}類的嵌套定義(避免使用)classOutClass{//頂層類

intconut;classInClass{//內(nèi)部類

voidprintConut(){ System.out.println("conut:"+(++conut));}}voidcreateInObject(){InClassin=newInClass();//引用內(nèi)部類

in.printConut();}}類的嵌套定義(避免使用)publicclassTestInClass//用于測試內(nèi)部類應(yīng)用的類{publicstaticvoidmain(String[]args){OutClassoutObj=newOutClass();//創(chuàng)建外部類對象

outObj.createInObject();//調(diào)用創(chuàng)建內(nèi)部類的成員方法

OutClass.InClassinObj=outObj.newInClass();//在外部創(chuàng)建內(nèi)部類對象

inObj.printConut();}}

運行結(jié)果:conut:1conut:2

JAVA類的存儲有兩種存儲方式:多個類定義存放在一個文件中,(但每個.java文件中只可有一個public類,且文件名與pubilc類名同名)

每個類定義分別存放在不同的文件中不管源代碼如何存放,編譯后每一個類都將生成一個字節(jié)碼文件,且文件名的前綴為類名,后綴為.class

含有屬于另外一個類的成員變量的典型例子

classDate{intyear,month,day;//描述年、月、日的三個成員變量

voidsetYear(inty){ year=y; }voidsetMonth(intm){ month=m;}voidsetDay(intd){ day=d;}voidsetDate(inty,intm,intd){year=y;month=m;day=d;}intgetYear(){returnyear;}intgetMonth(){returnmonth;}intgetDay(){returnday;}}Book類定義classBook//書籍類{Stringname;Stringauthor;DatepublishDate;floatprice;……//其他一些成員變量

……//成員方法}

Date是描述日期的類,Book是描述書籍的類。在Book類中,設(shè)一個表示出版日期的成員變量,它屬于Date類。

Book類與Date類關(guān)系可以將這兩個類看成具有“整體-部分”的關(guān)系。即Book類是由Date類對象和一些其他類型的成員變量組合而成的,它們共同地反映了書籍信息。下面是這種關(guān)系的UML圖形符號:

publishDate類中的成員在類中定義的成員時,根據(jù)所承擔(dān)的作用分為:變量/數(shù)據(jù)成員方法/操作成員在以上基礎(chǔ)上,變量和方法根據(jù)內(nèi)存分配情況又分為兩類:實例成員:類創(chuàng)建實例后,每個實例擁有一份,不同實例之間互不干擾。訪問它們時,必須通過實例/對象名訪問類成員:每個類只有唯一一份,被類的各個成員共享。訪問它們時,可根據(jù)實例/對象名訪問,也可直接通過類名訪問。定義時,加上關(guān)鍵字:static因此,類中成員共分為四類:實例變量,實例方法類變量,類方法3.2.2成員變量的定義與初始化

實例變量的定義格式:ModifiersDataTypeMemberName;Modifiers:修飾符,決定成員變量的存儲方式和訪問權(quán)限D(zhuǎn)ataType:

成員變量的類型MemberName:是成員變量的名稱如:classBook{//書籍類

publicStringname;

protectedStringauthor;

privateDatepublishDate;floatprice;……//其他一些成員變量

……//成員方法}

初始化實例變量主要有5個途徑每個數(shù)據(jù)數(shù)據(jù)類型有默認(rèn)的初始值可以在定義的同時賦予相應(yīng)的初值在一個成員方法中,為每個實例變量賦值在類的構(gòu)造方法中實現(xiàn)初始化實例變量

利用初始化塊對成員變量進(jìn)行初始化

初始化塊、構(gòu)造方法初始化成員變量

classPoint{intx,y;

{//初始化塊,無名代碼塊

x=10;y=20;System.out.println("Pointinitializationblock");}Point(){};//無參數(shù)的構(gòu)造方法

Point(intdx,intdy)//帶兩個參數(shù)的構(gòu)造方法

{x=dx;y=dy;//System.out.println("Pointconstructmethod");}}

3.2.3成員方法的定義

成員方法主要承擔(dān)外部操作對象屬性的任務(wù),如:Setters方法:對類中的每個成員變量賦值,Getters方法:獲取每個成員變量的當(dāng)前值,實現(xiàn)類/對象的其它功能的成員方法,如一般類的toString(),矩形類的area()方法。實例方法

定義格式為:

ModifiersResultTypeMethodName(parameterList)[throwsexceptions]{MethodBody}Modifiers:修飾符

(public/protected/private)ResultType:方法返回類型(void/String/int/…)MethodName:方法名稱parameterList:參數(shù)列表

throwsexceptions:列出方法能夠拋出的異常種類

時間類Time的定義publicclassTime//時間類{inthour,minute,second;//時、分、秒

voidsetTime(inth,intm,ints)//設(shè)置時間

{hour=(h<0)?0:h%24;minute=(m<0)?0:m%60;second=(s<0)?0:s%60;}intgetHour(){returnhour;}//返回時

intgetMinute(){returnminute;}//返回分

intgetSecond(){returnsecond;}//返回秒}

成員方法中處理的數(shù)據(jù)主要來源途徑

傳遞給成員方法的參數(shù)類中的成員變量,包括實例變量和類變量在方法體內(nèi)定義的局部變量在方法中調(diào)用其他成員方法所得到的返回值3.2.4成員方法的重載

重載——

在一個類中,同一個名稱的成員方法可以被定義多次的現(xiàn)象。一個成員方法重載的例子

在Time類,我們又增加了一個設(shè)置時間的成員方法,但這個成員方法的參數(shù)屬于String類,時間將以“12:04:35”的格式傳遞給該成員方法。classTime{inthour,minute,second;voidsetTime(inth,intm,ints)//參數(shù)為三個int變量

{hour=(h<0)?0:h%24;minute=(m<0)?0:m%60;second=(s<0)?0:s%60;}//參數(shù)為一個String類對象,如14:25:35voidsetTime(Stringtime)

{hour=Integer.parseInt(time.substring(0,2));hour=hour<0?0:hour%24;minute=Integer.parseInt(time.substring(3,5));minute=minute<0?0:minute%60;second=Integer.parseInt(time.substring(6,8));second=second<0?0:second%60;}intgetHour(){returnhour;}intgetMinute(){returnminute;}intgetSecond(){returnsecond;}}//endofclassTimepublicclassTestTime//測試類{ publicstaticvoidmain(Stringargs[]) { Timet=newTime();//創(chuàng)建Time對象

t.setTime("13:04:20");//調(diào)用參數(shù)為String的setTime()方法

System.out.println(t.getHour()+":"+t.getMinute()+":"+t.getSecond()); t.setTime(20,30,38);//調(diào)用參數(shù)為三個int的setTime()方法

System.out.println(t.getHour()+":"+t.getMinute()+":"+t.getSecond()) }}

將上面這兩個類定義存儲在一個文件名為TestTime.java中。經(jīng)過編譯生成Time.class和TestTime.class

運行的結(jié)果為:

13:4:2020:30:383.2.5構(gòu)造方法構(gòu)造方法——

在構(gòu)造類對象時使用的一種特殊的成員方法,其主要作用是初始化成員變量。

構(gòu)造方法的定義格式為:

[public]ClassName(parameterList)public:控制訪問權(quán)限的修飾符ClassName:類名稱parameterList:參數(shù)表

簡單的例子classPoint{intx,y,;Point(intdx,intdy){x=dx;y=dy;}……//其他的成員方法}

構(gòu)造方法Point(intdx,intdy)僅對兩個成員變量x和y賦予了初值。在利用new運算符創(chuàng)建Point類對象時,系統(tǒng)會自動地調(diào)用這個構(gòu)造方法,實現(xiàn)對實例變量初始化,而不需要用戶顯式地調(diào)用它。構(gòu)造方法的重載publicclassTime{inthour,minute,second;//用時、分、秒三個屬性描述時間

Time(inth,int,m,ints){……}//含有三個int類型參數(shù)的構(gòu)造方法

Time(longtime){……}//含有一個long類型參數(shù)的構(gòu)造方法

Time(Stringtime){……}//含有一個String類參數(shù)的構(gòu)造方法

voidsetTime(inth,intm,ints){……}intgetHour(){……}intgetMinute(){……}intgetSecond(){……}}

在這個類中,有三個構(gòu)造方法,它們的參數(shù)表均不相同。這樣,就可以用三種不同形式的參數(shù)創(chuàng)建并初始化對象。

默認(rèn)構(gòu)造方法

如果在定義類的時候,沒有定義任何構(gòu)造方法,系統(tǒng)將提供一個參數(shù)表為空的默認(rèn)構(gòu)造方法。在這個默認(rèn)的構(gòu)造方法的方法體中,只有一個調(diào)用父類無參數(shù)構(gòu)造方法的語句super()。例如:publicclassPoint{intx,y;……;//其他的成員方法}等價于publicclassPoint{intx,y;publicPoint(){super();}……;//其他的成員方法}3.3對象

類(對象)是對現(xiàn)實世界中實體進(jìn)行抽象的結(jié)果,現(xiàn)實世界中的任何實體都可以映射成對象。解決問題的過程就是對對象分析、處理的過程。程序是由有限個類(對象)構(gòu)成的,對象是程序操作的基本單位。所謂程序運行,就是對象之間不斷地發(fā)送消息及響應(yīng)消息的過程。

3.3.1對象的創(chuàng)建兩步:聲明對象變量,創(chuàng)建對象實例。聲明對象的語法格式為:

ClassNameobjectName[,objectName];例如:

DatedateObject;TimetimeObject1,timeObject2;new運算符創(chuàng)建對象的格式為:

newClassName(parameterList)

ClassName:對象所屬的類名稱parameterList:創(chuàng)建對象時提供的參數(shù)new運算符主要完成的操作:為對象分配存儲空間根據(jù)提供的參數(shù)格式調(diào)用與之匹配的構(gòu)造方法例如:dateObject=newDate(2003,5,23,10,34,56)3.3.2對象成員的使用對象創(chuàng)建后,就可以在對象之間相互發(fā)送及響應(yīng)消息,以便驅(qū)動程序的運作。發(fā)送消息就是對象發(fā)出調(diào)用自身或其他類對象的成員方法的命令,響應(yīng)消息就是對象具體地執(zhí)行上述的調(diào)用命令。

在對對象操作時,可能會引用成員變量或調(diào)用成員方法。下面是引用成員變量和調(diào)用成員方法的語法格式。objectName.memberVariableNameobjectName.memberMethodName(parameterList)

調(diào)用對象成員方法實際上就是向該對象發(fā)送請求操作的消息例3.3.1對象作為數(shù)組元素

classScoreClass//成績類{intNo;//學(xué)號

intscore;//成績

ScoreClass()//無參數(shù)的構(gòu)造方法

{No=1000;score=0;}ScoreClass(intn,ints)//有兩個參數(shù)的構(gòu)造方法

{No=n;score=s;}

voidsetInfo(intn,ints)//設(shè)置成績

{No=n;score=s;}intgetNo(){returnNo;}//獲取學(xué)號

intgetScore(){returnScore;}//獲取成績}

publicclassScoreTest//測試類{ publicstaticvoidmain(String[]args){ ScoreClass[]student=newScoreClass[10];//聲明并創(chuàng)建一維數(shù)組

for(inti=0;i<10;i++){ student[i]=newScoreClass( 1000+i,(int)(Math.random()*100) );//創(chuàng)建對象

} for(inti=0;i<10;i++){ System.out.println(student[i].getNo()+"\t"+student[i].getScore()); } }}

應(yīng)用對象數(shù)組元素,需要經(jīng)過下面幾個操作步驟:聲明對象數(shù)組 用new創(chuàng)建數(shù)組。此時,每個數(shù)組元素為null引用。 再用循環(huán)結(jié)構(gòu),為每個數(shù)組元素創(chuàng)建對象。 通過引用成員變量或調(diào)用成員方法對數(shù)組中每個對象進(jìn)行操作。例3.3.2類中的成員變量為對象

classPoint{//點坐標(biāo)

intx,y;//x、y坐標(biāo)

Point(){x=0;y=0;} Point(intdx,intdy){x=dx;y=dy;} voidsetXY(intdx,intdy){x=dx;y=dy;}//設(shè)置x、y intgetX(){returnx;}//返回x intgetY(){returny;}//返回y publicStringtoString(){//將坐標(biāo)信息轉(zhuǎn)換成String形式

return"("+x+","+y+")";}}

classRect{//矩形類 PointleftTop,rightBottom;//矩形左上角坐標(biāo),右下角坐標(biāo)

Rect(){ leftTop=newPoint(); rightBottom=newPoint(); }Rect(intx1,inty1,intx2,inty2){ leftTop=newPoint(x1,y1); rightBottom=newPoint(x2,y2); }

Rect(Pointlefttop,Pointrightbottom){ this.leftTop=lefttop; this.rightBottom=rightbottom;}doublegetArea(){returnMath.abs((leftTop.getX-rightbottom.getX)*(leftTop.getY-rightbottom.getY));}doublegetPerimeter

(){returnMath.abs((leftTop.getX-rightbottom.getX)+(leftTop.getY-rightbottom.getY))*2;}PointgetLeftTop(){returnleftTop;}//返回左上角坐標(biāo)PointgetRightBottom(){returnrightBottom;}//返回右下角坐標(biāo)publicStringtoString(){//將矩形信息轉(zhuǎn)換成String形式

returnleftTop.toString()+rightBottom.toString();}}

//endofclassRectpublicclassRectTest{//測試類

publicstaticvoidmain(String[]args){

Rectr1,r2,r3; Pointp1,p2; r1=newRect(10,20,30,40); p1=newPoint(); p2=newPoint(100,100); r2=newRect(p1,p2); System.out.println("r1:"+r1); System.out.println(“r1周長:”+r1.getPerimeter()+“,r1面積:"+r1.getArea()); System.out.println("r2is:"+r2.toString()); System.out.println(“r2周長:”+r2.getPerimeter()+“,r2面積:"+r2.getArea()); }}運行這個程序后,應(yīng)該得到結(jié)果:r1:(10,20)(30,40)r1周長:80.0,r1面積:400.0r2:(0,0)(100,100)r2周長:400.0,r1面積:10000.0通過這個例子,可以看出,對于含有成員對象的類,首先要創(chuàng)建每個成員對象,然后才能對其進(jìn)行操作。建議最好將它們放置在構(gòu)造方法中實現(xiàn)。3.3.3對象的清除創(chuàng)建對象的主要任務(wù)是為對象分配存儲空間,而清除對象的主要任務(wù)是回收存儲空間。Java語言提供了“自動回收垃圾”的機(jī)制。系統(tǒng)會周期地監(jiān)控對象是否還被使用,將不再被使用的對象自動地回收其所占用存儲空間。

3.4訪問屬性控制類、接口,它們的成員變量、成員方法都存在是否可以被他人訪問的訪問屬性。訪問屬性標(biāo)識可訪問性??稍L問性是在編譯時確定的靜態(tài)特性。訪問屬性機(jī)制實現(xiàn)數(shù)據(jù)隱藏,限制用戶對不同包和類的訪問權(quán)限。

4種訪問屬性

默認(rèn)訪問屬性public(公有)訪問屬性private(私有)訪問屬性protected(保護(hù))訪問屬性

為類、接口、成員變量和成員方法指定訪問屬性的格式為:[public|private|protected]ClassName;[public|private|protected]memberVariableName;[public|private|protected]memberMethodName(parameterList);

由于除默認(rèn)訪問屬性外,指定其他三種訪問屬性需要寫在定義之前,所以,又將它們稱為修飾符。3.4.1默認(rèn)訪問屬性如果沒有指定訪問修飾符,它們的訪問屬性就為默認(rèn)訪問屬性。具有默認(rèn)訪問屬性的類、成員變量和成員方法,只能被本類和同一個包中的其他類、接口及成員方法引用。

3.4.2public訪問屬性擁有public訪問屬性的類、接口、成員變量、成員方法可以被本類和其他任何類及成員方法引用。它們既可以位于同一個包中,也可以位于不同包中。例3.4.1不同包之間的類訪問

下面定義的三個類Point、Line和Test分別放在兩個不同的包中。其定義如下:packagePointPackage;//將Point和Line類放入PointPackage包publicclassPoint{publicintx,y;publicvoidmove(intdx,intdy){x+=dx;y+=dy;}//其他的成員方法

……;}classLine{Pointstart,end;Line(){start=newPoint();end=newPoint();}publicsetLine(Pointp1,Pointp2){......}//其他的成員方法

……;}將Point和Line類定義保存為Point.java文件。packagePointsUser;//將Test類放入PointsUser包importPointPackage.*;//加載PointPackage包中的Point和Line類publicclassTest{publicstaticvoidmain(String[]args){Pointp1=newPoint();Pointp2=newPoint(20,30);System.out.println(p.x+""+p.y);Lineline1=newLine(p1,p2);//!!!語法錯誤,找不到類Line}}將這個類定義保存為Test.java文件。3.4.3private訪問屬性數(shù)據(jù)隱藏是面向?qū)ο蟮某绦蛟O(shè)計倡導(dǎo)的設(shè)計思想。將數(shù)據(jù)與其操作封裝在一起,并將數(shù)據(jù)的組織隱藏起來利用成員方法作為對外的操作接口,這樣不但可以提高程序的安全性、可靠性,還有益于日后的維護(hù)、擴(kuò)展和重用。將類定義中的數(shù)據(jù)成員設(shè)置為private訪問屬性是實現(xiàn)數(shù)據(jù)隱藏機(jī)制的最佳方式。private訪問(私有)屬性可以應(yīng)用于類中的成員,包括成員變量、成員方法和內(nèi)部類或內(nèi)部接口。私有成員只能被本類中的方法直接引用。3.4.4protected訪問屬性

具有protected訪問屬性的類成員可以被本類、本包和其他包中的子類訪問。它的可訪問性介于默認(rèn)和public之間。如果你希望只對本包之外的子類開放,就應(yīng)該將其指定為protected訪問屬性。

歸納上述4種不同的訪問屬性,可以將各種訪問屬性的可訪問權(quán)限總結(jié)在表中:同一個類同一個包不同包中的子類不同包中的非子類private*默認(rèn)**protected***public****3.5靜態(tài)成員3.5.1類變量的定義及初始化在類中定義成員變量時,如果在訪問屬性修飾符之后,加上static修飾符,它們就屬于靜態(tài)成員。例如:publicstaticintstaticMember;

靜態(tài)成員變量只在加載類時創(chuàng)建一個副本,不管未來創(chuàng)建多少個這個類的對象,都將共享這一個副本。類變量的引用類變量在類被加載后立即創(chuàng)建,所以即使在該類沒有創(chuàng)建一個對象的時候,類變量也已經(jīng)存在。兩種引用方式:未創(chuàng)建對象時,用類名作為前綴引用類變量如果存在該類的對象,則既可以通過類名引用類變量,也可以通過對象名引用類變量。類變量不能在構(gòu)造方法中初始化。構(gòu)造方法只有在創(chuàng)建對象時才被調(diào)用,而類變量在沒有創(chuàng)建對象之前就已經(jīng)存在,并可以被引用;每創(chuàng)建一個對象,構(gòu)造方法就要被調(diào)用一次,而類變量應(yīng)該只被初始化一次。

類變量舉例publicclassPerson{publicstaticfinalintFEMALE=0;publicstaticfinalintMALE=1;publicstaticintMIN_AGE=0;publicstaticintMAX_AGE=200;Stringname;intage;intsex;…Person(Stringnm,intsx,intag){name=nm;sex=sx;age=ag;}}publicclassTestPerson1{publicstaticvoidmain(String[]args){Personp1=newPerson(“劉翔”,Person.MALE,25);Personp2=newPerson(“吳儀”,Person.FEMALE,55);

Person.MIN_AGE=20;Person.MAX_AGE=200;p1.MAX_AGE=150;System.out.println(p1.MIN_AGE);//1??System.out.println(p2.MAX_AGE);//2??System.out.println(Person.MIN_AGE);//3??System.out.println(Person.MAX_AGE);//4??}//endofmain()}//~類變量舉例(續(xù))publicclassTestPerson{publicstaticvoidmain(String[]args){Person[]ps=newPerson[2];ps[0]=newPerson(“劉翔”,Person.MALE,25);ps[1]=newPerson(“吳儀”,Person.FEMALE,55);for(inti=0;i<ps.length;i++){Stringsc=(ps[i].sex==ps[i].MALE)?“男”:“女”;//用中文的性別

System.out.println(“\n姓名:”+ps[i].name+”\n性別:”+sc+”\n年齡:”+ps[i].age);}//endoffor}//endofmain()}//~類變量的初始化器

又稱為靜態(tài)變量初始化器來實現(xiàn)初始化。類變量初始化器應(yīng)該位于類定義中,其語法格式為:

static{......//類變量初始化}

構(gòu)造方法與類變量初始化器(1)構(gòu)造方法用來初始化對象的實例變量類變量初始化器用來初始化類變量;(2)構(gòu)造方法在創(chuàng)建對象,即執(zhí)行new運算時由系統(tǒng)自動地調(diào)用類變量初始化器是在加載類時被自動地執(zhí)行;(3)構(gòu)造方法是一種特殊的成員方法,類變量初始化器不是方法。3.5.2類方法類方法也屬于類。在類方法中,只能對該方法中的局部變量或類變量進(jìn)行操作,而不能引用實例變量或調(diào)用實例方法。如果希望將一個成員方法定義成類方法,就在訪問屬性修飾符之后,加上static修飾符即可。例如:

publicstaticintgetMember(){returnstaticMember;}

3.6final、this和null修飾符finalfinal修飾某個方法:意味著這個方法不能被覆蓋final修飾成員變量:意味著這個成員變量在第一次被賦值后,不得被二次賦值final修飾局部變量:在第一次被賦值后,也只能被引用,不能被二次賦值。final修飾某個類:意味著這個類不能再作為父類派生其他的子類thisthis是對象自身的引用型系統(tǒng)變量。當(dāng)在實例方法中引用本類的實例成員時,編譯器會默認(rèn)地在實例成員前加上this作為前綴。例如構(gòu)造方法Employee(Stringn,doubles)這樣編寫publicEmployee(Stringn,doubles){name=n;salary=s;id=nextId;}this

但實際上,編譯器會將它改為:publicEmployee(Stringn,doubles){=n;this.salary=s;this.id=nextId;}通常情況下,對實例成員的引用,編譯器都會自動地幫助你加上this前綴。

若類的構(gòu)造方法中的參數(shù)與類的實例變量命名為相同的名稱,在成員方法中引用的變量名為局部變量,若想引用實例變量就需要顯式地加上this。nullnull是一個直接量,表示引用型變量為空的狀態(tài),通常用來作為引用型變量的初始值。例如:Employeee=null

當(dāng)希望一個對象型變量放棄它引用的對象時,也可以使用null實現(xiàn)。例如:

Employeee=newEmployee(“Wang”,2000.0);

若讓e放棄它引用的對象,可以寫成

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論