




已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一周周一內(nèi)容,面向?qū)ο蟾呒?jí)主題,本節(jié)內(nèi)容,類的組成對(duì)象,對(duì)象相等?(=與equals)封裝、繼承和多態(tài)抽象類與接口面向接口編程類或?qū)ο箨P(guān)系,代碼復(fù)用關(guān)鍵字static、final、abstract等內(nèi)部類,枚舉類,1、類的組成,請(qǐng)舉例,如Car類,請(qǐng)盡你的理解給出一個(gè)類可以有哪些要素組成,可以將現(xiàn)實(shí)生活中的對(duì)象經(jīng)過抽象,映射為程序中的對(duì)象。對(duì)象在程序中是通過一種抽象數(shù)據(jù)類型來描述的,這種抽象數(shù)據(jù)類型稱為類(Class)。,1、類的組成,定義類的語法格式:修飾符class類名.類體.類體可以由多個(gè)屬性、方法、構(gòu)造器組成。注意:類的修飾符可以是public、final或省略這兩個(gè)以及abstract。類名只要是合法的標(biāo)識(shí)符.一個(gè)類里可以包含三種最常見的成員:構(gòu)造器、屬性、方法。,1、類的組成,定義屬性的語法格式:修飾符屬性類型屬性名=默認(rèn)值;修飾符可以是訪問權(quán)限:public:可被任何類訪問。protected:被類自身,子類及同一包中的類訪問。default:也稱友好,被類自身和同一包中的類訪問。private:只能被類自身訪問。其他:transient聲明一個(gè)暫時(shí)性變量,對(duì)象存檔時(shí)不必保存該變量;final聲明一個(gè)常量,程序不能改變其值,通常用大寫;voltatile用于聲明一個(gè)共享變量,用于多個(gè)并發(fā)線程共享;static:表示類成員。,成員變量和局部變量,成員變量指的是在類范圍里定義的變量;局部變量指的是在一個(gè)方法內(nèi)定義的變量。不管是成員變量還是局部變量都遵守相同的命名規(guī)則。成員變量分為類屬性和實(shí)例屬性.對(duì)于類屬性無論通過類還是對(duì)象來訪問都是訪問同一個(gè)對(duì)象,只要一個(gè)對(duì)象改變了類屬性,那么其他對(duì)象對(duì)應(yīng)的類屬性也改變了.成員變量不用顯式初始化,只要定義了一個(gè)類屬性或?qū)嵗龑傩?系統(tǒng)默認(rèn)進(jìn)行初始化。,局部變量,局部變量可分為三種:形參方法局部變量代碼塊局部變量.與成員變量不同的是除了形參外,其他局部變量都必須顯式地初始化,Java里允許局部變量和成員變量重名。這樣局部變量會(huì)覆蓋成員變量,這時(shí)通過this來調(diào)用實(shí)例的屬性.,成員變量的初始化,當(dāng)類被加載時(shí),類成員就在內(nèi)存中分配了一塊空間。當(dāng)對(duì)象被創(chuàng)建時(shí),實(shí)例成員就在內(nèi)存中分配了內(nèi)存空間。實(shí)例變量與實(shí)例共存亡;類變量與類本身共存亡。,局部變量的運(yùn)行機(jī)制,局部變量?jī)H在方法內(nèi)有效。當(dāng)方法執(zhí)行完成時(shí),局部變量便會(huì)自動(dòng)銷毀。,1、類的組成,定義方法的語法格式:修飾符方法返回值類型方法名(形參列表).方法體.方法中的修飾符可以是public,protected,private,static,final,abstract,其中訪問控制符只能出現(xiàn)一個(gè),abstract,final只能出現(xiàn)其一.返回值類型可以是基本類型和引用類型,如果無返回值,要用void來聲明形參列表,可以由零到多組組成,參數(shù)之間用逗號(hào)(“,”)隔開.static是一個(gè)特殊的關(guān)鍵字,譯為”靜態(tài)”,所有有static修飾的叫類屬性,類方法,類成員.,1、類的組成,定義方法的語法格式:修飾符方法返回值類型方法名(形參列表).方法體.方法的調(diào)用:,1、類的組成,定義方法的語法格式:修飾符方法返回值類型方法名(形參列表).方法體.方法的重載就是在同一個(gè)類中允許同時(shí)存在一個(gè)以上的同名函數(shù),只要它們的參數(shù)個(gè)數(shù)或類型不同即可。如:publicclassTestpublicstaticvoidmain(Stringargs)intisum;doublefsum;isum=add(3,5);isum=add(3,5,6);fsum=add(3.2,6.5);publicstaticintadd(intx,inty)reutrnx+y;publicstaticintadd(intx,inty,intz)returnx+y+z;publicstaticdoubleadd(doublex,doubley)returnx+y;,修飾詞訪問權(quán)限:public:protected:private:default:其他abstract修飾的為抽象方法,必須被重寫,抽象類不一定包含abstract方法,但如果一個(gè)類包含abstract方法,該類必須聲明為抽象類;final修飾的方法不能再被類重寫;native用于將java代碼和其他語言的代碼集成起來;synchronized用來控制多個(gè)并發(fā)線程對(duì)共享數(shù)據(jù)的訪問。static:類方法。,不同限定詞的訪問權(quán)限,public類,缺省修飾的類,P41,方法的重載,Java允許在一個(gè)類里定義多個(gè)同名方法,只要形參列表不同即可.所以方法的重載只要滿足兩個(gè)條件(兩同一不同):1.同一個(gè)類中,方法名相同;2.形參不同。和返回值類型無關(guān).所以在調(diào)用這些方法時(shí)要傳入不同的參數(shù)值.,方法的參數(shù)傳遞基本數(shù)據(jù)類型的參數(shù)傳遞,方法的參數(shù)傳遞引用數(shù)據(jù)類型的參數(shù)傳遞,方法的參數(shù)傳遞-值傳遞,形參長(zhǎng)度可變的方法,如果在定義方法時(shí),在最后一個(gè)參數(shù)的類型后增加三點(diǎn),則表明該形參接受多個(gè)參數(shù)值,多個(gè)參數(shù)值被當(dāng)成數(shù)組傳入.長(zhǎng)度可變的形參只能位于最后一個(gè)參數(shù),并一個(gè)方法里只能有一個(gè)可變長(zhǎng)度的參數(shù).,1、類的組成,定義構(gòu)造器的語法格式:修飾符構(gòu)造器名(形參列表)修飾符可以是publicprotectedprivate構(gòu)造器必須和類名相同,形參和方法的形參一樣.,構(gòu)造函數(shù)的定義與作用,構(gòu)造器是一種特殊的方法,構(gòu)造對(duì)象并對(duì)其初始化。例:Date類的構(gòu)造器叫DatenewDate()-構(gòu)造一個(gè)新對(duì)象,且初始化當(dāng)前時(shí)間.構(gòu)造器可以有0個(gè),一個(gè)或多個(gè)參數(shù)構(gòu)造器和類有相同的名字一個(gè)類可以有多個(gè)構(gòu)造器構(gòu)造器沒有返回值構(gòu)造器總是和new運(yùn)算符一起使用.如果沒有聲明構(gòu)造器,則系統(tǒng)默認(rèn)提供一個(gè)無參的構(gòu)造器;如果自己聲明了構(gòu)造器,系統(tǒng)則不再默認(rèn)提供。,構(gòu)造方法的重載,和一般的方法重載一樣,重載的構(gòu)造方法具有不同個(gè)數(shù)或不同類型的參數(shù),編譯器就可以根據(jù)這一點(diǎn)判斷出用new關(guān)鍵字產(chǎn)生對(duì)象時(shí),該調(diào)用哪個(gè)構(gòu)造方法了。產(chǎn)生對(duì)象的格式是:new類名(參數(shù)列表);重載構(gòu)造方法可以完成不同初始化的操作,如:p3=newPerson(“Tom”,18);語句,會(huì)做這樣幾件事:創(chuàng)建指定類的新實(shí)例對(duì)象,在堆內(nèi)存中為實(shí)例對(duì)象分配內(nèi)存空間,并調(diào)用指定類的構(gòu)造方法,最后將實(shí)例對(duì)象的首地址賦值給引用變量p3。,構(gòu)造方法的一些細(xì)節(jié),在java每個(gè)類里都至少有一個(gè)構(gòu)造方法,如果程序員沒有在一個(gè)類里定義構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)為這個(gè)類產(chǎn)生一個(gè)默認(rèn)的構(gòu)造方法,這個(gè)默認(rèn)構(gòu)造方法沒有參數(shù),在其方法體中也沒有任何代碼,即什么也不做。由于系統(tǒng)提供的默認(rèn)構(gòu)造方法往往不能滿足編程者的需求,我們可以自己定義類的構(gòu)造方法,來滿足我們的需要,一旦編程者為該類定義了構(gòu)造方法,系統(tǒng)就不再提供默認(rèn)的構(gòu)造方法了。聲明構(gòu)造方法,如無特殊需要,應(yīng)使用public關(guān)鍵字,在我們前面例子中,可以使用private訪問修飾符嗎?,this是什么?,如果func2方法被調(diào)用,一定是事先已經(jīng)有了一個(gè)存在的對(duì)象,func2被作為那個(gè)對(duì)象的方法被使用。在func2內(nèi)部能引用別的對(duì)象,同樣也能引用func2所屬的那個(gè)對(duì)象。在func2中,自己所屬的那個(gè)對(duì)象的引用名稱是什么呢?this關(guān)鍵字在java程序里的作用和它的詞義很接近,它在函數(shù)內(nèi)部就是這個(gè)函數(shù)所屬的對(duì)象的引用變量。,this引用句柄的存放位置,每個(gè)成員方法內(nèi)部,都有一個(gè)this引用變量,指向調(diào)用這個(gè)方法的對(duì)象,類中的成員方法與this之間的關(guān)系如圖,this引用句柄的應(yīng)用,一個(gè)類中的成員方法可以直接調(diào)用同類中的其他成員,其實(shí)我們?cè)谝粋€(gè)方法內(nèi)部使用“this.其他成員”的引用方式和直接使用“其他成員”的效果是一樣的,那this還有多大的作用呢?在有些情況下,我們還是非得用this關(guān)鍵字不可的:讓類的成員變量名和對(duì)其進(jìn)行賦值的成員方法的形參變量同名是必要的,這樣的代碼誰看了都能明白這兩個(gè)變量是彼此相關(guān)的,老手看到函數(shù)的定義,就能揣摩出函數(shù)中的代碼,大大節(jié)省了別人和自己日后閱讀程序的時(shí)間。假設(shè)我們有一個(gè)容器類和一個(gè)部件類,在容器類的某個(gè)方法中要?jiǎng)?chuàng)建部件類的實(shí)例對(duì)象,而部件類的構(gòu)造方法要接收一個(gè)代表其所在容器的參數(shù)。構(gòu)造方法是在產(chǎn)生對(duì)象時(shí)被java系統(tǒng)自動(dòng)調(diào)用的,我們不能在程序中象調(diào)用其他方法一樣去調(diào)用構(gòu)造方法。但我們可以在一個(gè)構(gòu)造方法里調(diào)用其他重載的構(gòu)造方法,不是用構(gòu)造方法名,而是用this(參數(shù)列表)的形式,根據(jù)其中的參數(shù)列表,選擇相應(yīng)的構(gòu)造方法。,3、對(duì)象相等?(=與equals),什么是對(duì)象相等?如何讓兩輛車相等?,對(duì)象的比較,“=”運(yùn)算符與equals()方法的區(qū)別怎樣比較兩個(gè)數(shù)組對(duì)象的內(nèi)容是否相等,對(duì)象的產(chǎn)生,Personp1=newPerson();執(zhí)行完后的內(nèi)存狀態(tài),對(duì)象的產(chǎn)生,當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),會(huì)對(duì)其中各種類型的成員變量自動(dòng)進(jìn)行初始化賦值。除了基本數(shù)據(jù)類型之外的都是變量類型都是引用類型,如上面的Person及前面講過的數(shù)組。,1、對(duì)象的生成:包括聲明、實(shí)例化。聲明:聲明并不為對(duì)象分配內(nèi)存空間,而只是分配一個(gè)引用空間;對(duì)象的引用類似于指針,是32位的地址空間,它的值指向一個(gè)中間的數(shù)據(jù)結(jié)構(gòu),它存儲(chǔ)有關(guān)數(shù)據(jù)類型的信息以及當(dāng)前對(duì)象所在的堆的地址,而對(duì)于對(duì)象所在的實(shí)際的內(nèi)存地址是不可操作的,這就保證了安全性。如:Circlecle;,Circle,實(shí)例化:運(yùn)算符new為對(duì)象分配內(nèi)存空間,它調(diào)用對(duì)象的構(gòu)造方法,返回引用;一個(gè)類的不同對(duì)象分別占據(jù)不同的內(nèi)存空間。如:cle=newCircle();或cle=newCircle(10,20,5);,0 xAB12,Circle,對(duì)象的引用,對(duì)象實(shí)體,Pointp1=newPoint(12,16);Pointp2=newPoint(6,18);,0 xAB10,p1,0 xDD12,p2,p1=p2;,0 xDD12,p1,0 xDD12,p2,對(duì)象的使用,創(chuàng)建新的對(duì)象之后,我們就可以使用“對(duì)象名.對(duì)象成員”的格式,來訪問對(duì)象的成員(包括屬性和方法)classTestPersonpublicstaticvoidmain(Stringargs)Personp1=newPerson();Personp2=newPerson();p1.age=-30;p1.shout();p2.shout();程序運(yùn)行的內(nèi)存布局如下圖,2、對(duì)象的使用通過運(yùn)算符.可以實(shí)現(xiàn)對(duì)變量的訪問和方法的調(diào)用。變量和方法可以通過設(shè)定訪問權(quán)限來限制其它對(duì)象對(duì)它的訪問。調(diào)用對(duì)象的變量格式:objectReference.variableobjectReference是一個(gè)已生成的對(duì)象,也可以是能生成對(duì)象的表達(dá)式例:p.x=10;tx=newPoint().x;調(diào)用對(duì)象的方法格式:objectReference.methodName(paramlist);例如:p.move(30,20);newPoint().move(30,20);,對(duì)象的生命周期,與基本類型的生命周期一樣,3、對(duì)象的清除當(dāng)不存在對(duì)一個(gè)對(duì)象的引用時(shí),該對(duì)象成為一個(gè)無用對(duì)象。Java的垃圾收集器周期性的自動(dòng)掃描對(duì)象的動(dòng)態(tài)內(nèi)存區(qū),把沒有引用的對(duì)象作為垃圾收集起來并釋放。也可以調(diào)用System.gc();進(jìn)行垃圾回收。,3、封裝、繼承和多態(tài),請(qǐng)舉例說明你的理解,如上述的Car類,請(qǐng)分別說明封裝、繼承和多態(tài)類的字段有多態(tài)嗎?,4、抽象類與接口,如何定義抽象類,作用是什么?如何定義接口類,作用是什么?它們的相似之處是什么?區(qū)別是什么?,3.接口,“對(duì)實(shí)現(xiàn)我的類,看起來都應(yīng)該是我的樣子”接口規(guī)定了一個(gè)類的基本形式:自變量,方法名,返回類型.但不規(guī)定方法的主體.接口的數(shù)據(jù)類型:都默認(rèn)為static,final只是一種形式,不涉及細(xì)節(jié),3.接口定義的形式,publicinterfaceinterfaceNameextendsSuperInterfaceList/常量定義和方法定義,接口(interface)作為特殊形式的抽象類,和類(class)在使用上具有類似的約束。一個(gè)public接口只能定義在同名的.java文件中,3.類對(duì)接口的實(shí)現(xiàn),用implements子句來表示一個(gè)類實(shí)現(xiàn)某個(gè)接口。在類體中可以使用接口中定義的常量,而且必須實(shí)現(xiàn)接口中定義的所有方法。利用接口可實(shí)現(xiàn)多重繼承,即一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,在implements子句中用逗號(hào)分隔。接口的作用和抽象類相似,只定義原型,不直接定義方法的內(nèi)容。接口中的方法和變量都必須是public的。,5、類或?qū)ο箨P(guān)系,代碼復(fù)用,類或?qū)ο笥心男╆P(guān)系?以Dog或Car為例如狗Dog是一種動(dòng)物,狗有一個(gè)項(xiàng)圈(NeckIdentier),狗有四條腿(Leg),狗汪汪叫(WangWang),狗用棍子(Stick-工具,誰都可以用)追打老鼠(Cat)?,6、面向接口編程,假設(shè)你做的一個(gè)關(guān)于不同車的游戲,在這個(gè)游戲中,你可以選擇寶馬X6、比亞迪F6、哈佛H6等,它們可以越野模式,也可以運(yùn)動(dòng)模式前行,請(qǐng)你設(shè)計(jì)一下車這個(gè)類,然后讓它一會(huì)越野模式一會(huì)運(yùn)動(dòng)模式前行!如果你是車的司機(jī),從對(duì)象調(diào)用的角度講,誰是調(diào)用者,誰是服務(wù)者,你是怎樣看你的車的行為的?,4、7、回顧關(guān)鍵字final修飾一個(gè)類:該類不能被繼承修飾一個(gè)方法:該方法不能被重載修飾一個(gè)變量:該變量是常量abstract修飾一個(gè)類:該類是抽象類,不能實(shí)例化,必須被繼承才能創(chuàng)建對(duì)象。修飾個(gè)方法:該方法必須被重寫。含有abstract方法的類必定是抽象類。,static用static聲明類方法和類變量。this可以出現(xiàn)在類的實(shí)例方法中,代表使用該方法的當(dāng)前對(duì)象。this一般可以省略。但當(dāng)成員變量與局部變量名字相同時(shí),若要訪問成員變量,this不能省略。this方法不能出現(xiàn)在類方法中,因?yàn)轭惙椒梢酝ㄟ^類名直接調(diào)用,此時(shí),可能還沒有任何對(duì)象誕生。,static關(guān)鍵字用static聲明類方法和類變量。實(shí)例變量和類變量不同對(duì)象的實(shí)例變量被分配不同的內(nèi)存空間;但所有對(duì)象的類變量都分配相同的內(nèi)存空間。,如果一個(gè)類被加載,在沒有創(chuàng)建對(duì)象時(shí),實(shí)例變量不會(huì)分配內(nèi)存,但類變量被分配了內(nèi)存,直到程序推出才釋放其所占有的空間;可以通過類名直接訪問非private修飾的類變量。類名.類變量,內(nèi)存模型:classTakecarestaticintx;inty;publicvoidop()TakecareA1=newTakecare();TakecareA2=newTakecare();,Static修飾變量注意事項(xiàng):實(shí)現(xiàn)各實(shí)例間的通信??梢愿檮?chuàng)建的實(shí)例數(shù)相當(dāng)于某些語言中的全局變量非private的靜態(tài)成員變量可采用類名直接訪問。,實(shí)例方法與類方法類的字節(jié)碼被加載到內(nèi)存后,類的實(shí)例方法沒有被分配入口地址。當(dāng)類創(chuàng)建第一個(gè)對(duì)象后,才會(huì)分配相應(yīng)的入口地址。以后創(chuàng)建的對(duì)象共享該入口地址。對(duì)象都消失時(shí),該入口地址被取消。只要類被加載,即使沒有創(chuàng)建對(duì)象,類方法也會(huì)被分配入口地址。直到程序退出才取消該入口地址??梢酝ㄟ^類名調(diào)用非private修飾的類方法。兩種方法中的局部變量都是在執(zhí)行時(shí)才分配內(nèi)存空間。,前面講過,類方法不能操作實(shí)例變量和實(shí)例方法,請(qǐng)思考一下原因。,因?yàn)椋悇?chuàng)建對(duì)象之前,實(shí)例成員變量還沒有分配內(nèi)存,實(shí)例方法也沒有入口地址。,classAinta;staticintb;voidf(intx,inty)a=x;/合法.b=y;/合法.staticvoidg(intz)b=23;/合法.a=z;/非法.,變量操作,classMemberstaticintclassVar;intinstanceVar;staticvoidsetClassVar(inti)classVar=i;/instanceVar=i;/類方法不能訪問實(shí)例變量staticintgetClassVar()returncla
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國聚丁二烯橡膠行業(yè)發(fā)展現(xiàn)狀及投資潛力預(yù)測(cè)報(bào)告
- 2025年中國電網(wǎng)信息化市場(chǎng)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 中國通信工程施工行業(yè)市場(chǎng)深度分析及投資戰(zhàn)略研究報(bào)告
- 中國出軸結(jié)合件行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告(2024-2030)
- 凈水劑行業(yè)深度研究分析報(bào)告(2024-2030版)
- 中國無線網(wǎng)卡行業(yè)發(fā)展監(jiān)測(cè)及市場(chǎng)發(fā)展?jié)摿︻A(yù)測(cè)報(bào)告
- “小小夢(mèng)想家”兒童創(chuàng)意教育商業(yè)計(jì)劃書
- 中國江西省生活垃圾清運(yùn)和處理市場(chǎng)調(diào)查研究及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 瀝青混凝土培訓(xùn)課件
- 濕陷性黃土可行性研究報(bào)告
- 排污許可證申請(qǐng)流程
- 藥具培訓(xùn)培訓(xùn)試題及答案
- 重慶市大渡口區(qū)2023-2024學(xué)年四年級(jí)下學(xué)期數(shù)學(xué)期末測(cè)試卷(含答案)
- 2025年高考全國一卷寫作范文4篇
- 2025年廣西公需科目答案03
- 2025屆江蘇省徐州市名校七下數(shù)學(xué)期末達(dá)標(biāo)檢測(cè)試題含解析
- 2025年山東夏季高中學(xué)業(yè)水平合格考模擬生物試卷(含答案)
- 大連海事大學(xué)育鯤輪電機(jī)員培訓(xùn)課件詳解
- GB/T 45577-2025數(shù)據(jù)安全技術(shù)數(shù)據(jù)安全風(fēng)險(xiǎn)評(píng)估方法
- IgG4腎病的診斷和治療
- 中國啤酒籃行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告2025-2028版
評(píng)論
0/150
提交評(píng)論