




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
類與對象的基本概念第一頁,共一百零七頁,編輯于2023年,星期一目錄2.1編程語言的幾個發(fā)展階段2.2類2.3對象2.4static關(guān)鍵字2.5this關(guān)鍵字2.6包2.7訪問權(quán)限第二頁,共一百零七頁,編輯于2023年,星期一2.1編程語言的幾個發(fā)展階段1、機器語言如:匯編語言面向機器的語言,低級語言,是計算機處理信息的早期語言特點:程序中的指令都是由0,1組成的序列,稱為“機器指令”優(yōu)點:深入理解CPU、寄存器等硬件系統(tǒng)原理單片機等硬件系統(tǒng)編程第三頁,共一百零七頁,編輯于2023年,星期一2、過程語言如:C語言、Fortran語言面向過程的語言,高級語言,接近人的“自然語言”特點:程序通常由若干“塊”(過程/函數(shù))組成,每個塊負責(zé)完成獨立的功能第四頁,共一百零七頁,編輯于2023年,星期一采用面向過程的編程思想:程序=算法+數(shù)據(jù)優(yōu)點:流程清晰執(zhí)行效率比面向?qū)ο蟪绦蚋哌m于編寫數(shù)據(jù)處理類程序及較小程序,如:算法。缺點:處理復(fù)雜問題時,邏輯混亂可維護性較差第五頁,共一百零七頁,編輯于2023年,星期一3、面向?qū)ο笳Z言如:Java語言、C++語言高級語言,更加符合人的思維模式特點:封裝繼承多態(tài)第六頁,共一百零七頁,編輯于2023年,星期一采用面向?qū)ο蟮木幊趟枷耄骸耙磺卸际菍ο蟆背绦?對象+消息優(yōu)點:高可維護性、可擴展性、可復(fù)用性、健壯性適于編寫復(fù)雜的、較大的程序缺點:執(zhí)行效率較低第七頁,共一百零七頁,編輯于2023年,星期一封裝將數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一個對象中,并且對對象的使用者隱藏數(shù)據(jù)的實現(xiàn)過程例如:卡車、公共汽車、轎車等可以抽象出其共性:屬性:可乘人數(shù)、運行速度、功率、油耗、自重、輪子數(shù)目行為(功能):加速、減速、剎車、轉(zhuǎn)彎面向?qū)ο缶幊倘齻€特性第八頁,共一百零七頁,編輯于2023年,星期一將這些特性封裝在一起,用類描述classcar
{ intnumber; doublespeed; intpower; doubleoilwear; doubleweight; intwheel; publicvoidspeedup(doublespeed){……} publicvoidspeeddown(doublespeed){……} publicvoidbrake(){……} ……}第九頁,共一百零七頁,編輯于2023年,星期一繼承通過抽象,抽取出某一類的多個對象的共同特性,形成“類”子類可以繼承父類的屬性及功能,并能夠擴展例如:自行車、校車都屬于“車”這一類型,并且具有共同的屬性“時速”,可抽象出“車”作為父類第十頁,共一百零七頁,編輯于2023年,星期一class車
double時速class校車
class自行車
class轎車
//自動繼承了“時速”屬性校車(){
時速=90;}//還能擴展屬性和功能boolean有空調(diào);void放音樂(){}第十一頁,共一百零七頁,編輯于2023年,星期一多態(tài)方法的多態(tài):多個操作(方法)可具有相同的名字,但方法接收的參數(shù)必須不同;繼承的多態(tài):同一個操作被不同類型對象調(diào)用時,可產(chǎn)生不同的行為。對象的上轉(zhuǎn)型對象第十二頁,共一百零七頁,編輯于2023年,星期一示例:方法的多態(tài)class校車
校車(){
時速=90;}校車(天氣wea){if(wea==天氣.雨天)時速=70;elseif(wea==天氣.雪天)
時速=120;}校車(司機who,天氣wea){if(who==司機.張師傅&&wea==天氣.雨天)
時速=120;elseif……}第十三頁,共一百零七頁,編輯于2023年,星期一示例:繼承的多態(tài)class車
doublecost(){return0;}class校車
doublecost(){return65;}class自行車
doublecost(){return650;}車car=new車();doublecost=car.cost();//cost的值為0車car=new校車();doublecost=car.cost();//cost的值為65車car=new自行車();doublecost=car.cost();//cost的值為650第十四頁,共一百零七頁,編輯于2023年,星期一2.2類什么是類?類是組成Java程序的基本要素;類封裝了一類對象的屬性和方法;類是用來定義對象的模板。類的實現(xiàn)包括兩部分:類聲明類體第十五頁,共一百零七頁,編輯于2023年,星期一1、類的聲明classPeople{…}類的聲明People為類名第十六頁,共一百零七頁,編輯于2023年,星期一2、類體classPeople{…}類體:大括號及其包含內(nèi)容類體的內(nèi)容:大括號之間內(nèi)容第十七頁,共一百零七頁,編輯于2023年,星期一聲明形式
[public][abstract|final]class類名稱 [extends父類名稱][implements接口名稱列表]
{
成員變量聲明及初始化; 成員方法聲明及方法體;
}思考:類聲明的作用,需要定義哪些內(nèi)容,需要明確哪些限制,有無現(xiàn)有代碼可以復(fù)用?第十八頁,共一百零七頁,編輯于2023年,星期一類體的內(nèi)容由兩部分構(gòu)成:變量定義:用來刻畫屬性;方法定義:用來刻畫功能。例如:class
梯形
{
float
上底,下底,高,area;//變量定義部分
float
計算面積(){//方法定義部分
area=(上底+下底)*高/2.0f;
returnarea;}
void
修改高(floath){//方法定義部分高=h;}}第十九頁,共一百零七頁,編輯于2023年,星期一鐘表類思考:該類封裝了時分秒狀態(tài)屬性和設(shè)置時間、顯示時間的功能方法publicclassClock{//成員變量
inthour;intminute;intsecond;//成員方法
publicvoidsetTime(intnewH,intnewM,intnewS){ hour=newH;minute=newM;second=news;}publicvoidshowTime(){ System.out.println(hour+":"+minute+":"+second);}}第二十頁,共一百零七頁,編輯于2023年,星期一3、成員變量和局部變量成員變量:變量定義部分定義的變量;局部變量:方法體中定義的變量和方法的參數(shù)。例:找出下面類中的成員變量和局部變量class梯形{float上底,下底,高,area;float計算面積(){floatarea=(上底+下底)*高/2.0f;returnarea;}void修改高(floath){
高=h;}}第二十一頁,共一百零七頁,編輯于2023年,星期一成員變量和局部變量的類型可以是Java
中的任一類型,包括基本類型和引用類型。成員變量在整個類內(nèi)都有效;局部變量只在定義它的方法內(nèi)有效。成員變量與其在類體中的書寫位置無關(guān),但不提倡將成員變量定義分散開第二十二頁,共一百零七頁,編輯于2023年,星期一成員變量分為兩種類型:實例成員變量:簡稱“實例變量”,無“static”修飾類變量:或稱“靜態(tài)變量”,有“static”修飾舉例:classPuppy{ String名字;
staticString叫聲="汪汪~~";}實例變量類變量第二十三頁,共一百零七頁,編輯于2023年,星期一如果局部變量與成員變量名稱相同,則:
成員變量被隱藏(即在該方法中,成員變量功能失效)舉例:classPuppy{ String名字="旺財"; void關(guān)門放狗(){ String名字="泰格"; System.out.println(名字+",咬他!"); }}Puppyd=newPuppy();d.關(guān)門放狗();運行結(jié)果:
泰格,咬他!第二十四頁,共一百零七頁,編輯于2023年,星期一如果方法參數(shù)與成員變量名稱相同,則:
成員變量被隱藏舉例:classPuppy{ String名字="旺財"; void關(guān)門放狗(String名字){ System.out.println(名字+",咬他!"); }}Puppyd=newPuppy();d.關(guān)門放狗("泰格");運行結(jié)果:
泰格,咬他!第二十五頁,共一百零七頁,編輯于2023年,星期一當(dāng)方法的局部變量、方法參數(shù)與成員
變量的名稱相同時,如果想調(diào)用成員變量,必須使用“this”關(guān)鍵字this代表調(diào)用該方法的當(dāng)前對象舉例:第二十六頁,共一百零七頁,編輯于2023年,星期一classPuppy{ String名字="旺財"; void關(guān)門放狗(){ String名字="泰格"; System.out.println(名字+",咬他!"); } void關(guān)門放狗(String名字){ System.out.println(名字+",咬他!");}}Puppyd=newPuppy();d.關(guān)門放狗();d.關(guān)門放狗("泰格");運行結(jié)果:
泰格,咬他! 泰格,咬他!this.名字this.名字運行結(jié)果:
旺財,咬他! 旺財,咬他!第二十七頁,共一百零七頁,編輯于2023年,星期一聲明格式—格式有很多,這里是成員變量的格式,思考有哪些?
[public
|
protected
|
private]
[static][
final]
變量數(shù)據(jù)類型變量名1[=變量初值], 變量名2[=變量初值],…;格式說明public、protected、private
為訪問控制符static指明這是一個靜態(tài)成員變量final指明變量的值不能被修改成員變量聲明小結(jié):第二十八頁,共一百零七頁,編輯于2023年,星期一4、方法方法的定義包括兩部分:方法聲明和方法體。void關(guān)門放狗(String名字){ System.out.println(名字+",咬他!");}方法體方法聲明第二十九頁,共一百零七頁,編輯于2023年,星期一方法定義格式
[public|protected|private] [static][final][abstract]
返回類型方法名([參數(shù)列表])[throwsexceptionList]
{
方法體
}第三十頁,共一百零七頁,編輯于2023年,星期一①方法聲明通常包含:修飾符、方法類型、方法名、參數(shù)
publicstatic
void
main(String[]args)方法類型可以是任意的Java類型,void代表該方法無返回值參數(shù)的類型也可以是任意的Java類型②方法體通常包含:局部變量定義、Java語句第三十一頁,共一百零七頁,編輯于2023年,星期一③方法的參數(shù)、方法內(nèi)定義的局部變量
有效范圍問題:方法參數(shù)在整個方法內(nèi)有效,方法內(nèi)定義的局部變量從它定義的位置之后開始有效;如果局部變量的定義是在一個復(fù)合語句中,那么該局部變量的有效范圍是該復(fù)合語句;如果局部變量的定義是在一個循環(huán)語句中,那么該局部變量的有效范圍是該循環(huán)語句。第三十二頁,共一百零七頁,編輯于2023年,星期一void看門(Peoplep){
String日志;
if(p.身份=="小偷"){
Strings="小偷來啦!";
報警(); 咬他();
日志+=s; } if(p.身份=="主人"){
日志+="主人來啦!"; for(inti=1;i<=100;i++){
搖尾巴(); } } System.out.println(日志); System.out.println(s); System.out.println(p.身份); System.out.println(i);}有效無效有效無效第三十三頁,共一百零七頁,編輯于2023年,星期一5、方法重載方法的多態(tài)性一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即:或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同。第三十四頁,共一百零七頁,編輯于2023年,星期一classArea{
floatgetArea(floatr){ return3.14f*r*r; }
doublegetArea(floatx,inty) { returnx*y;}
floatgetArea(inty,floatx){ returnx*y;}
doublegetArea(floatx,floaty,floatz){ return(x*x+y*y+z*z)*2.0;}}參數(shù)個數(shù)不同參數(shù)類型不同第三十五頁,共一百零七頁,編輯于2023年,星期一注意:方法的返回類型和參數(shù)的名字不參與比較,即:即使兩個方法類型不同,也必須保證參數(shù)不同。例如:
doublegetArea(floatx,inty){
returnx*y;
}
floatgetArea(floaty,intx){
returnx*y;
}非法!因為兩個方法參數(shù)相同。第三十六頁,共一百零七頁,編輯于2023年,星期一6、構(gòu)造方法一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型,構(gòu)造方法也可以重載。沒有類型并不是指返回類型是void,其實返回的類型是類本身第三十七頁,共一百零七頁,編輯于2023年,星期一class梯形{ float上底,下底,高;
梯形(){
上底=60;
下底=100;
高=20; }
梯形(floatx,inty,floath){
上底=x;
下底=y;
高=h; }}名字與類名相同沒有類型重載了兩個構(gòu)造方法梯形t=new梯形(0.1,100,100);使用構(gòu)造方法創(chuàng)建了一個對象第三十八頁,共一百零七頁,編輯于2023年,星期一構(gòu)造方法用于創(chuàng)建一個對象。構(gòu)造方法很“特殊”,不能被其他方法調(diào)用;只能在初始化一個對象的時候使用從內(nèi)存分配上講,一個對象通過構(gòu)造方法初始化結(jié)束過后,才得到該對象的內(nèi)存模型第三十九頁,共一百零七頁,編輯于2023年,星期一在Java中,類至少需要一個構(gòu)造方法;
如果類中沒有構(gòu)造方法,那么在使用該類創(chuàng)建對象時,JVM會為該類自動提供一個無參數(shù)的構(gòu)造方法,稱為默認構(gòu)造方法。如:
classPuppy{
String名字;
staticString叫聲="汪汪~~";
}Puppyd=newPuppy();調(diào)用了默認構(gòu)造方法,無參數(shù);實際上,默認構(gòu)造方法無任何代碼第四十頁,共一百零七頁,編輯于2023年,星期一注意:如果類定義了一個或者多個構(gòu)造方法,那么Java不提供默認的構(gòu)造方法。例如:
class梯形{
float上底,下底,高;
梯形(floatx,inty,floath){
上底=x; 下底=y; 高=h;
}
}梯形t=new梯形(0.1,100,100);梯形t2=new梯形();合法非法第四十一頁,共一百零七頁,編輯于2023年,星期一構(gòu)造方法中通常寫一些初始化成員變量的
賦值語句,當(dāng)然也可以寫其他代碼。例如:
classPuppy{
String名字="旺財";
Puppy() {
System.out.println("旺財來也!");
}
}Puppyd=newPuppy();運行結(jié)果:
旺財來也!第四十二頁,共一百零七頁,編輯于2023年,星期一7、類方法和實例方法類中的方法也可分為實例方法和類方法:不加關(guān)鍵字static的是實例方法;加關(guān)鍵字static的是類方法構(gòu)造方法是特殊的方法,不能用static修飾構(gòu)造方法第四十三頁,共一百零七頁,編輯于2023年,星期一8、值得注意的問題對成員變量的操作只能放在方法中,在定義類的成員變量時可以同時賦初值,如:
classA{
inta=12;
}
classA{
inta;
a=12;
}合法非法因為:
類體的內(nèi)容由成員變量定義、
方法定義兩部分組成。第四十四頁,共一百零七頁,編輯于2023年,星期一實例方法既能對類變量操作,也能對實例
變量操作;而類方法只能對類變量進行操作。例如:
classA{
inta=12;
staticintb;
voidf(){
a=120;
b=210;
}
staticvoidg(){
a=1;
b=2;
}
}合法非法合法合法第四十五頁,共一百零七頁,編輯于2023年,星期一實例方法可以調(diào)用該類中的其他方法;而類方法
只能調(diào)用該類的類方法,不能調(diào)用實例方法。例如:
classA{
staticinta;
staticvoidg(){
a=3;
}
voidf(){
g();
}
staticvoidh(){
g();
f();
}
}合法非法合法第四十六頁,共一百零七頁,編輯于2023年,星期一2.3對象類是創(chuàng)建對象的模板。當(dāng)使用一個類創(chuàng)建了一個對象時,我們也說該對象是這個類的一個實例。在程序中,同一個類可以創(chuàng)建多個對象。第四十七頁,共一百零七頁,編輯于2023年,星期一1、創(chuàng)建對象包括對象聲明和為對象分配內(nèi)存兩個步驟。(1)對象聲明一般格式為: 類名
對象名;如: People
zhangPing;第四十八頁,共一百零七頁,編輯于2023年,星期一(2)為對象分配內(nèi)存使用new運算符和類的構(gòu)造方法為聲明的對象分配內(nèi)存new運算符的功能可以理解為:“給我一個新對象”如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認的構(gòu)造方法第四十九頁,共一百零七頁,編輯于2023年,星期一(3)對象的內(nèi)存模型例子:西游記人物class西游記人物{
float身高,體重; String發(fā)型,耳朵,手,腳,嘴巴;
void喊話(Strings){ System.out.println(s);}}執(zhí)行代碼:
西游記人物豬八戒;//聲明對象
豬八戒=new西游記人物();//分配內(nèi)存,使用了new運算符和默認構(gòu)造方法第五十頁,共一百零七頁,編輯于2023年,星期一①首先,聲明了一個對象“豬八戒”。西游記人物豬八戒;此時的內(nèi)存模型如圖所示:NULL豬八戒未分配實體的對象
“空對象”第五十一頁,共一百零七頁,編輯于2023年,星期一②然后,實例化對象“豬八戒”。豬八戒=new西游記人物();此時,JVM會做兩件事:為“西游記人物”類的“發(fā)型”等成員變量分配內(nèi)存;接著執(zhí)行構(gòu)造方法。如果成員變量沒有被初始化,則系統(tǒng)提供默認值。new運算符在為成員變量分配內(nèi)存后,將返回一個引用給變量“豬八戒”,即:記錄對象的起始地址。第五十二頁,共一百零七頁,編輯于2023年,星期一“豬八戒”實例化后的內(nèi)存模型如圖所示:存儲成員的空間是連續(xù)的,因此,對象“豬八戒”內(nèi)保存的其實是第一個成員變量的首地址豬八戒0.00.0nullnullnullnullnull體重耳朵手腳嘴巴身高發(fā)型0xAB3第五十三頁,共一百零七頁,編輯于2023年,星期一③創(chuàng)建多個不同對象一個類可以通過使用new運算符創(chuàng)建多個不同對象,這些對象將分配不同的內(nèi)存空間,因此,改變一個對象的成員變量不會影響其他對象的狀態(tài)。例如:創(chuàng)建兩個“西游記人物”類型的對象:
西游記人物豬八戒=new西游記人物();
西游記人物孫悟空=new西游記人物();第五十四頁,共一百零七頁,編輯于2023年,星期一兩個對象實例化后的內(nèi)存模型如圖所示:豬八戒0.00.0nullnullnullnullnull0xAB3孫悟空0.00.0nullnullnullnullnull0xFA6第五十五頁,共一百零七頁,編輯于2023年,星期一2、使用對象通過使用運算符“.”,對象可以訪問自己的成員變量或者調(diào)用方法。例如:
class西游記人物{
float身高,體重;String發(fā)型,耳朵,手,腳,嘴巴;
void喊話(Strings){ System.out.println(s); }
}第五十六頁,共一百零七頁,編輯于2023年,星期一執(zhí)行代碼:
西游記人物豬八戒=new西游記人物();
豬八戒.發(fā)型="光頭";
豬八戒.喊話("俺老豬五百年前是帥哥!");}訪問成員變量調(diào)用方法第五十七頁,共一百零七頁,編輯于2023年,星期一3、對象的引用和實體用類創(chuàng)建一個對象時,類中的成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱做該對象的實體,而對象中存放著引用(即地址)。一個類創(chuàng)建的多個對象,如果具有相同的引用,那么就具有完全相同的實體。
第五十八頁,共一百零七頁,編輯于2023年,星期一例如:類Point:用x,y坐標表示的點
classPoint{
intx,y;
Point(intx,inty){
this.x=x;
this.y=y;
}
}
第五十九頁,共一百零七頁,編輯于2023年,星期一執(zhí)行代碼:Pointp1=newPoint(1,1);Pointp2=newPoint(100,100);p1=p2;p111yx0xAB3p2100100yx0xFF7問題:這部分內(nèi)存怎么辦?0xFF7第六十頁,共一百零七頁,編輯于2023年,星期一沒有實體的對象稱作空對象,空對象不能
使用;如果一個實體不再被任何對象所擁有,則變成了“內(nèi)存垃圾”;Java有“垃圾回收”機制,周期性的檢測某實體是否已經(jīng)不再被任何對象所擁有,發(fā)現(xiàn)則回收內(nèi)存。第六十一頁,共一百零七頁,編輯于2023年,星期一4、參數(shù)傳值當(dāng)方法被調(diào)用時,如果方法有參數(shù),參數(shù)必須要實例化,即參數(shù)變量必須有具體的值。在Java中,方法的所有參數(shù)都是“傳值”的,也就是說,方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。第六十二頁,共一百零七頁,編輯于2023年,星期一參數(shù)傳值的精度轉(zhuǎn)換問題:對于基本數(shù)據(jù)類型的參數(shù),向該參數(shù)傳遞
的值的精度不可以高于該參數(shù)的精度。例如:不可以向int型參數(shù)傳遞一個float值,但可以向double型參數(shù)傳遞一個float值。第六十三頁,共一百零七頁,編輯于2023年,星期一參數(shù)傳值對變量的影響:傳遞基本類型的變量由于基本類型變量中保存的是“值”,因此改變的僅僅是值的副本,傳值的變量內(nèi)容不會改變;傳遞引用類型的變量由于引用類型變量中保存的是“地址”,因此盡管傳遞的是“地址”的副本,但是改變的是“地址”所對應(yīng)的內(nèi)存實體,因此變量內(nèi)容發(fā)生改變。第六十四頁,共一百零七頁,編輯于2023年,星期一例如:class西游記人物{ double體重;
void設(shè)置體重(doublex){
體重=x;
}
}第六十五頁,共一百零七頁,編輯于2023年,星期一class塑身{
void改變體重(西游記人物p,doublex)
{
x=x-20; p.設(shè)置體重(x);
}
}第六十六頁,共一百零七頁,編輯于2023年,星期一執(zhí)行代碼:西游記人物八戒=new西游記人物();八戒.設(shè)置體重(300.00);西游記人物悟空=new西游記人物();八戒300.00體重0xAB3悟空0.00體重0xFF7第六十七頁,共一百零七頁,編輯于2023年,星期一執(zhí)行代碼:塑身帥=new塑身();帥.改變體重(悟空,八戒.體重);
px改變體重@0xF110八戒300.00體重0xAB3悟空0.00體重0xFF7調(diào)用方法時,會創(chuàng)建方法棧來保存方法的變量。x=x-20;p.設(shè)置體重(x);280.00300.000xFF7280.00第六十八頁,共一百零七頁,編輯于2023年,星期一2.4Static關(guān)鍵字類變量與類方法:用static修飾的成員變量稱為類變量
用static修飾的方法稱為類方法
第六十九頁,共一百零七頁,編輯于2023年,星期一1、實例變量和類變量的區(qū)別一個類通過new運算符可以創(chuàng)建多個對象,每個對象的實例變量將被分配不同的內(nèi)存空間;而對于類變量,每個對象的類變量都共享同一內(nèi)存空間,因此,改變其中一個對象的類變量的值,會影響其它對象的這個類變量。第七十頁,共一百零七頁,編輯于2023年,星期一從內(nèi)存分配上來說:實例變量的內(nèi)存在創(chuàng)建對象時才會分配,不同的對象分配不同地址;類變量的內(nèi)存在加載類時就創(chuàng)建好了,不管這個類是否創(chuàng)建了對象,類變量地址固定不變。第七十一頁,共一百零七頁,編輯于2023年,星期一例如:class西游記人物{
staticString發(fā)型;
double體重=70;
西游記人物(Strings,doublex){
發(fā)型=s;體重=x;
}
}第七十二頁,共一百零七頁,編輯于2023年,星期一執(zhí)行代碼:西游記人物悟空=new西游記人物("毛寸",75);西游記人物沙僧=new西游記人物("溜冰場",90);System.out.println(沙僧.發(fā)型);System.out.println(沙僧.體重);System.out.println(悟空.發(fā)型);System.out.println(悟空.體重);第七十三頁,共一百零七頁,編輯于2023年,星期一2、實例方法和類方法的區(qū)別實例方法也是在創(chuàng)建對象時才分配入口地址的,但是,后面所創(chuàng)建的對象共享第一個對象創(chuàng)建時生成的入口地址,也就是說,方法的入口地址被所有對象共享。當(dāng)所有對象都不存在時,實例方法的入口地址才被回收。第七十四頁,共一百零七頁,編輯于2023年,星期一而對于類方法,入口地址在加載類時就分
配了,無論類是否創(chuàng)建了對象,該入口地址都可以直接使用(用類名直接調(diào)用)。當(dāng)程序退出時,類方法的入口地址才被回收。第七十五頁,共一百零七頁,編輯于2023年,星期一2.5this關(guān)鍵字this表示“當(dāng)前對象”。this可以出現(xiàn)在實例方法和構(gòu)造方法中,但不可以出現(xiàn)在類方法中。this關(guān)鍵字出現(xiàn)在類的構(gòu)造方法中時,代表使用該構(gòu)造方法所創(chuàng)建的對象。this關(guān)鍵字出現(xiàn)在類的實例方法中時,代表正在調(diào)用該方法的當(dāng)前對象。第七十六頁,共一百零七頁,編輯于2023年,星期一例如:classA{ intx; voidf(){
this.x=100; }
}執(zhí)行代碼:Aa1=newA();Aa2=newA();a1.f();a2.f();第七十七頁,共一百零七頁,編輯于2023年,星期一2.6包包是Java中有效的管理類的一個機制。1、包語句通過關(guān)鍵字package聲明包語句。package語句作為Java源文件的第一條語句,指明該源文件定義的類所在的包。package語句的一般格式為:
package包名;第七十八頁,共一百零七頁,編輯于2023年,星期一如果源程序中省略了package語句,那么:
源文件中定義命名的類被隱含地認為是“無名包”的一部分,即:源文件中定義命名的類在同一個包中,但該包沒有名字包名可以是一個合法的標識符,也可以是若干個標識符加“.”分割而成第七十九頁,共一百零七頁,編輯于2023年,星期一2、import語句使用import語句可以引入包中的類。例如:引入一個包中的所有類:
importjava.awt.*;引入某個類:
importjava.util.Date;第八十頁,共一百零七頁,編輯于2023年,星期一注意:Java會自動載入java.lang包中的所有類,因此不需要顯式的importjava.lang包中包含了系統(tǒng)的核心類,是程序運行必不可少的。如果import引入了整個包中的類,那么會增加編譯時間,但是不會影響程序運行性能,因為Java是動態(tài)加載類的。第八十一頁,共一百零七頁,編輯于2023年,星期一所謂訪問權(quán)限是指對象是否可以通過
“.”運算符操作自己的變量,或使用類中的方法。訪問限制修飾符有private、protected和public,或者可以無修飾符。2.7訪問權(quán)限第八十二頁,共一百零七頁,編輯于2023年,星期一問題:訪問權(quán)限有什么用處?用來限制不同類的對象之間訪問成員變量或者調(diào)用方法的權(quán)限注意:在編寫類的時候,類中的實例方法總是可以訪問該類的成員變量;類方法總是可以操作該類中的類變量,與訪問限制符無關(guān)系。第八十三頁,共一百零七頁,編輯于2023年,星期一舉例:class教師
{
public
String姓名;
private
double身高;
voidset教師信息(Strings,doubled){
姓名=s;
身高=d; }}對于教師類的某個實例方法可以不受限制的訪問成員變量,與修飾符無關(guān)第八十四頁,共一百零七頁,編輯于2023年,星期一而對于不同的類,訪問存在限制:class教師{
public
String姓名;
private
double身高;
voidset教師信息( Strings, doubled){
姓名=s;
身高=d; }}class學(xué)生{
教師小郭子=new教師();
voidset教師信息( Strings, doubled){
小郭子.姓名=s;
小郭子.身高=d;}}若某學(xué)生對象想訪問教師對象中的成員:第八十五頁,共一百零七頁,編輯于2023年,星期一執(zhí)行以下代碼:學(xué)生小張=new學(xué)生();小張.set教師信息("馬路殺手",170);出錯!錯誤描述:public修飾的姓名可以修改;private修飾的身高不能訪問!不同類的對象之間,訪問成員變量或方法的權(quán)限是由修飾符限制的。第八十六頁,共一百零七頁,編輯于2023年,星期一問題:為什么要設(shè)置訪問權(quán)限?保護數(shù)據(jù)類封裝了本身特有的成員和方法,其中有一部分是不希望被其他無關(guān)的對象訪問的。盡量將數(shù)據(jù)“私有化”可以盡可能的保護這些數(shù)據(jù),使類的職責(zé)“分工明確”。第八十七頁,共一百零七頁,編輯于2023年,星期一class教師{
public
String姓名;
private
double身高;
voidset教師信息( Strings, doubled){
姓名=s;
身高=d; }}允許其他類的對象訪問只希望“教師”自己的方法來管理第八十八頁,共一百零七頁,編輯于2023年,星期一1、私有變量和私有方法用private修飾本類中的實例方法可以訪問本類的私有變量和方法只有在本類中創(chuàng)建該類的對象時,這個對象才能訪問自己的私有變量和方法:在類A中創(chuàng)建了類A的對象a,a能訪問自己的私有變量和方法在類B中創(chuàng)建了類A的對象a,則a不能訪問自己的私有變量和方法第八十九頁,共一百零七頁,編輯于2023年,星期一class教師{
public
String姓名;
private
double身高;
voidset教師信息( Strings, doubled){
姓名=s;
身高=d; }}第九十頁,共一百零七頁,編輯于2023年,星期一class教師{
public
String姓名;
private
double身高;
voidset教師信息( Strings, doubled){
教師小郭=new教師();
小郭.姓名=s;
小郭.身高=d; }}class學(xué)生{voidset教師信息( Strings, doubled){
教師小郭=new教師();
小郭.姓名=s;
小郭.身高=d;
}}合法非法第九十一頁,共一百零七頁,編輯于2023年,星期一2、共有變量和共有方法用public修飾即使不是在本類中創(chuàng)建該類的對象,該對象也能訪問自己的共有變量和共有方法在類B中創(chuàng)建了類A的對象a,則a能訪問自己的共有變量和方法第九十二頁,共一百零七頁,編輯于2023年,星期一class教師{
public
String姓名;
public
double身高;
voidset教師信息( Strings, doubled){
教師小郭=new教師();
小郭.姓名=s;
小郭.身高=d; }}class學(xué)生{voidset教師信息( Strings, doubled){
教師小郭=new教師();
小郭.姓名=s;
小郭.身高=d;
}}合法合法第九十三頁,共一百零七頁,編輯于2023年,星期一可以說,某個對象的public成員允許
在任何類的對象中訪問而不受限制同理,對于一個類的共有類變量,那么在另外一個類中,也能通過類名來操作這個共有類變量。第九十四頁,共一百零七頁,編輯于2023年,星期一3、友好變量和友好方法無修飾符修飾的變量和方法稱為友好變量和友好方法,或簡稱“友元”即使不是在本類中創(chuàng)建該類的對象,如果這兩個類在同一個包中,該對象也能訪問自己的友好變量和友好方法在類B中創(chuàng)建了類A的對象a,若類A和類B在同一包中,則a能訪問自己的友元第九十五頁,共一百零七頁,編輯于2023年,星期一packageguo;class教師{String姓名;double身高;
voidset教師信息( Strings, doubled){
教師小郭=new教師();
小郭.姓名=s;
小郭.身高=d; }}packageguo;class學(xué)生{voidset教師信息( Strings, doubled){
教師小郭=new教師();
小郭.姓名=s;
小郭.身高=d;
}}合法合法第九十六頁,共一百零七頁,編輯于2023年,星期一同理,對于一個類的友好類變量,如果
兩個類在同一包中,那么在另外一個類中,也能通過類名來操作這個友好類變量。第九十七頁,共一百零七頁,編輯于2023年,星期一4、受保護的成員變量和方法用protected修飾即使不是在本類中創(chuàng)建該類的對象,如果這兩個類在同一個包中,該對象也能訪問自己的受保護的成員變量和方法在類B中創(chuàng)建了類A的對象a,若類A和類B在同一包中,則a能訪問自己的protected成員和方法第九十八頁,共一百零七頁,編輯于2023年,星期一問題:protected訪問性與“友元”一致?在類繼承的訪問限制上
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)開發(fā)安全施工與環(huán)境保護措施
- 建筑工地安全管理及保證措施
- 航空航天招標代理質(zhì)量控制與保障措施
- 六年級下冊信息技術(shù)課程評價計劃
- 勞務(wù)分包資質(zhì)合同范本
- 某網(wǎng)站商業(yè)計劃書
- 知識產(chǎn)權(quán)交易平臺建設(shè)商業(yè)計劃書
- 軟件開發(fā)團隊季度工作計劃書范文
- 月嫂用工合同
- 綠色建筑工程的工期優(yōu)化措施
- 英語-外研(一年級起點)-四年級下冊-學(xué)生單詞默寫專用表格
- 《怎樣確保騎車安全》11
- GB/T 39866-2021建筑門窗附框技術(shù)要求
- GB/T 2421-1999電工電子產(chǎn)品環(huán)境試驗第1部分:總則
- GB/T 16422.4-2022塑料實驗室光源暴露試驗方法第4部分:開放式碳弧燈
- DB3201-T 1133-2022《旅游景區(qū)安全評估規(guī)范》
- 最難理解的V型濾池!90秒全面掌握構(gòu)造和工作原理
- 新發(fā)展大學(xué)英語聽力教程 2(全新修訂版)答案及聽力原文
- 第6課《現(xiàn)代科技進步與人類社會發(fā)展》課件-高中歷史統(tǒng)編版(2019)選擇性必修二經(jīng)濟與社會生活
- 設(shè)備檢修登記表
- 高等數(shù)學(xué)上冊ppt課件完整版
評論
0/150
提交評論