




已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第一周周一內(nèi)容,面向?qū)ο蟾呒壷黝},本節(jié)內(nèi)容,類的組成對象,對象相等?(=與equals)封裝、繼承和多態(tài)抽象類與接口面向接口編程類或?qū)ο箨P系,代碼復用關鍵字static、final、abstract等內(nèi)部類,枚舉類,1、類的組成,請舉例,如Car類,請盡你的理解給出一個類可以有哪些要素組成,可以將現(xiàn)實生活中的對象經(jīng)過抽象,映射為程序中的對象。對象在程序中是通過一種抽象數(shù)據(jù)類型來描述的,這種抽象數(shù)據(jù)類型稱為類(Class)。,1、類的組成,定義類的語法格式:修飾符class類名.類體.類體可以由多個屬性、方法、構(gòu)造器組成。注意:類的修飾符可以是public、final或省略這兩個以及abstract。類名只要是合法的標識符.一個類里可以包含三種最常見的成員:構(gòu)造器、屬性、方法。,1、類的組成,定義屬性的語法格式:修飾符屬性類型屬性名=默認值;修飾符可以是訪問權(quán)限:public:可被任何類訪問。protected:被類自身,子類及同一包中的類訪問。default:也稱友好,被類自身和同一包中的類訪問。private:只能被類自身訪問。其他:transient聲明一個暫時性變量,對象存檔時不必保存該變量;final聲明一個常量,程序不能改變其值,通常用大寫;voltatile用于聲明一個共享變量,用于多個并發(fā)線程共享;static:表示類成員。,成員變量和局部變量,成員變量指的是在類范圍里定義的變量;局部變量指的是在一個方法內(nèi)定義的變量。不管是成員變量還是局部變量都遵守相同的命名規(guī)則。成員變量分為類屬性和實例屬性.對于類屬性無論通過類還是對象來訪問都是訪問同一個對象,只要一個對象改變了類屬性,那么其他對象對應的類屬性也改變了.成員變量不用顯式初始化,只要定義了一個類屬性或?qū)嵗龑傩?系統(tǒng)默認進行初始化。,局部變量,局部變量可分為三種:形參方法局部變量代碼塊局部變量.與成員變量不同的是除了形參外,其他局部變量都必須顯式地初始化,Java里允許局部變量和成員變量重名。這樣局部變量會覆蓋成員變量,這時通過this來調(diào)用實例的屬性.,成員變量的初始化,當類被加載時,類成員就在內(nèi)存中分配了一塊空間。當對象被創(chuàng)建時,實例成員就在內(nèi)存中分配了內(nèi)存空間。實例變量與實例共存亡;類變量與類本身共存亡。,局部變量的運行機制,局部變量僅在方法內(nèi)有效。當方法執(zhí)行完成時,局部變量便會自動銷毀。,1、類的組成,定義方法的語法格式:修飾符方法返回值類型方法名(形參列表).方法體.方法中的修飾符可以是public,protected,private,static,final,abstract,其中訪問控制符只能出現(xiàn)一個,abstract,final只能出現(xiàn)其一.返回值類型可以是基本類型和引用類型,如果無返回值,要用void來聲明形參列表,可以由零到多組組成,參數(shù)之間用逗號(“,”)隔開.static是一個特殊的關鍵字,譯為”靜態(tài)”,所有有static修飾的叫類屬性,類方法,類成員.,1、類的組成,定義方法的語法格式:修飾符方法返回值類型方法名(形參列表).方法體.方法的調(diào)用:,1、類的組成,定義方法的語法格式:修飾符方法返回值類型方法名(形參列表).方法體.方法的重載就是在同一個類中允許同時存在一個以上的同名函數(shù),只要它們的參數(shù)個數(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方法,但如果一個類包含abstract方法,該類必須聲明為抽象類;final修飾的方法不能再被類重寫;native用于將java代碼和其他語言的代碼集成起來;synchronized用來控制多個并發(fā)線程對共享數(shù)據(jù)的訪問。static:類方法。,不同限定詞的訪問權(quán)限,public類,缺省修飾的類,P41,方法的重載,Java允許在一個類里定義多個同名方法,只要形參列表不同即可.所以方法的重載只要滿足兩個條件(兩同一不同):1.同一個類中,方法名相同;2.形參不同。和返回值類型無關.所以在調(diào)用這些方法時要傳入不同的參數(shù)值.,方法的參數(shù)傳遞基本數(shù)據(jù)類型的參數(shù)傳遞,方法的參數(shù)傳遞引用數(shù)據(jù)類型的參數(shù)傳遞,方法的參數(shù)傳遞-值傳遞,形參長度可變的方法,如果在定義方法時,在最后一個參數(shù)的類型后增加三點,則表明該形參接受多個參數(shù)值,多個參數(shù)值被當成數(shù)組傳入.長度可變的形參只能位于最后一個參數(shù),并一個方法里只能有一個可變長度的參數(shù).,1、類的組成,定義構(gòu)造器的語法格式:修飾符構(gòu)造器名(形參列表)修飾符可以是publicprotectedprivate構(gòu)造器必須和類名相同,形參和方法的形參一樣.,構(gòu)造函數(shù)的定義與作用,構(gòu)造器是一種特殊的方法,構(gòu)造對象并對其初始化。例:Date類的構(gòu)造器叫DatenewDate()-構(gòu)造一個新對象,且初始化當前時間.構(gòu)造器可以有0個,一個或多個參數(shù)構(gòu)造器和類有相同的名字一個類可以有多個構(gòu)造器構(gòu)造器沒有返回值構(gòu)造器總是和new運算符一起使用.如果沒有聲明構(gòu)造器,則系統(tǒng)默認提供一個無參的構(gòu)造器;如果自己聲明了構(gòu)造器,系統(tǒng)則不再默認提供。,構(gòu)造方法的重載,和一般的方法重載一樣,重載的構(gòu)造方法具有不同個數(shù)或不同類型的參數(shù),編譯器就可以根據(jù)這一點判斷出用new關鍵字產(chǎn)生對象時,該調(diào)用哪個構(gòu)造方法了。產(chǎn)生對象的格式是:new類名(參數(shù)列表);重載構(gòu)造方法可以完成不同初始化的操作,如:p3=newPerson(“Tom”,18);語句,會做這樣幾件事:創(chuàng)建指定類的新實例對象,在堆內(nèi)存中為實例對象分配內(nèi)存空間,并調(diào)用指定類的構(gòu)造方法,最后將實例對象的首地址賦值給引用變量p3。,構(gòu)造方法的一些細節(jié),在java每個類里都至少有一個構(gòu)造方法,如果程序員沒有在一個類里定義構(gòu)造方法,系統(tǒng)會自動為這個類產(chǎn)生一個默認的構(gòu)造方法,這個默認構(gòu)造方法沒有參數(shù),在其方法體中也沒有任何代碼,即什么也不做。由于系統(tǒng)提供的默認構(gòu)造方法往往不能滿足編程者的需求,我們可以自己定義類的構(gòu)造方法,來滿足我們的需要,一旦編程者為該類定義了構(gòu)造方法,系統(tǒng)就不再提供默認的構(gòu)造方法了。聲明構(gòu)造方法,如無特殊需要,應使用public關鍵字,在我們前面例子中,可以使用private訪問修飾符嗎?,this是什么?,如果func2方法被調(diào)用,一定是事先已經(jīng)有了一個存在的對象,func2被作為那個對象的方法被使用。在func2內(nèi)部能引用別的對象,同樣也能引用func2所屬的那個對象。在func2中,自己所屬的那個對象的引用名稱是什么呢?this關鍵字在java程序里的作用和它的詞義很接近,它在函數(shù)內(nèi)部就是這個函數(shù)所屬的對象的引用變量。,this引用句柄的存放位置,每個成員方法內(nèi)部,都有一個this引用變量,指向調(diào)用這個方法的對象,類中的成員方法與this之間的關系如圖,this引用句柄的應用,一個類中的成員方法可以直接調(diào)用同類中的其他成員,其實我們在一個方法內(nèi)部使用“this.其他成員”的引用方式和直接使用“其他成員”的效果是一樣的,那this還有多大的作用呢?在有些情況下,我們還是非得用this關鍵字不可的:讓類的成員變量名和對其進行賦值的成員方法的形參變量同名是必要的,這樣的代碼誰看了都能明白這兩個變量是彼此相關的,老手看到函數(shù)的定義,就能揣摩出函數(shù)中的代碼,大大節(jié)省了別人和自己日后閱讀程序的時間。假設我們有一個容器類和一個部件類,在容器類的某個方法中要創(chuàng)建部件類的實例對象,而部件類的構(gòu)造方法要接收一個代表其所在容器的參數(shù)。構(gòu)造方法是在產(chǎn)生對象時被java系統(tǒng)自動調(diào)用的,我們不能在程序中象調(diào)用其他方法一樣去調(diào)用構(gòu)造方法。但我們可以在一個構(gòu)造方法里調(diào)用其他重載的構(gòu)造方法,不是用構(gòu)造方法名,而是用this(參數(shù)列表)的形式,根據(jù)其中的參數(shù)列表,選擇相應的構(gòu)造方法。,3、對象相等?(=與equals),什么是對象相等?如何讓兩輛車相等?,對象的比較,“=”運算符與equals()方法的區(qū)別怎樣比較兩個數(shù)組對象的內(nèi)容是否相等,對象的產(chǎn)生,Personp1=newPerson();執(zhí)行完后的內(nèi)存狀態(tài),對象的產(chǎn)生,當一個對象被創(chuàng)建時,會對其中各種類型的成員變量自動進行初始化賦值。除了基本數(shù)據(jù)類型之外的都是變量類型都是引用類型,如上面的Person及前面講過的數(shù)組。,1、對象的生成:包括聲明、實例化。聲明:聲明并不為對象分配內(nèi)存空間,而只是分配一個引用空間;對象的引用類似于指針,是32位的地址空間,它的值指向一個中間的數(shù)據(jù)結(jié)構(gòu),它存儲有關數(shù)據(jù)類型的信息以及當前對象所在的堆的地址,而對于對象所在的實際的內(nèi)存地址是不可操作的,這就保證了安全性。如:Circlecle;,Circle,實例化:運算符new為對象分配內(nèi)存空間,它調(diào)用對象的構(gòu)造方法,返回引用;一個類的不同對象分別占據(jù)不同的內(nèi)存空間。如:cle=newCircle();或cle=newCircle(10,20,5);,0 xAB12,Circle,對象的引用,對象實體,Pointp1=newPoint(12,16);Pointp2=newPoint(6,18);,0 xAB10,p1,0 xDD12,p2,p1=p2;,0 xDD12,p1,0 xDD12,p2,對象的使用,創(chuàng)建新的對象之后,我們就可以使用“對象名.對象成員”的格式,來訪問對象的成員(包括屬性和方法)classTestPersonpublicstaticvoidmain(Stringargs)Personp1=newPerson();Personp2=newPerson();p1.age=-30;p1.shout();p2.shout();程序運行的內(nèi)存布局如下圖,2、對象的使用通過運算符.可以實現(xiàn)對變量的訪問和方法的調(diào)用。變量和方法可以通過設定訪問權(quán)限來限制其它對象對它的訪問。調(diào)用對象的變量格式:objectReference.variableobjectReference是一個已生成的對象,也可以是能生成對象的表達式例:p.x=10;tx=newPoint().x;調(diào)用對象的方法格式:objectReference.methodName(paramlist);例如:p.move(30,20);newPoint().move(30,20);,對象的生命周期,與基本類型的生命周期一樣,3、對象的清除當不存在對一個對象的引用時,該對象成為一個無用對象。Java的垃圾收集器周期性的自動掃描對象的動態(tài)內(nèi)存區(qū),把沒有引用的對象作為垃圾收集起來并釋放。也可以調(diào)用System.gc();進行垃圾回收。,3、封裝、繼承和多態(tài),請舉例說明你的理解,如上述的Car類,請分別說明封裝、繼承和多態(tài)類的字段有多態(tài)嗎?,4、抽象類與接口,如何定義抽象類,作用是什么?如何定義接口類,作用是什么?它們的相似之處是什么?區(qū)別是什么?,3.接口,“對實現(xiàn)我的類,看起來都應該是我的樣子”接口規(guī)定了一個類的基本形式:自變量,方法名,返回類型.但不規(guī)定方法的主體.接口的數(shù)據(jù)類型:都默認為static,final只是一種形式,不涉及細節(jié),3.接口定義的形式,publicinterfaceinterfaceNameextendsSuperInterfaceList/常量定義和方法定義,接口(interface)作為特殊形式的抽象類,和類(class)在使用上具有類似的約束。一個public接口只能定義在同名的.java文件中,3.類對接口的實現(xiàn),用implements子句來表示一個類實現(xiàn)某個接口。在類體中可以使用接口中定義的常量,而且必須實現(xiàn)接口中定義的所有方法。利用接口可實現(xiàn)多重繼承,即一個類可以實現(xiàn)多個接口,在implements子句中用逗號分隔。接口的作用和抽象類相似,只定義原型,不直接定義方法的內(nèi)容。接口中的方法和變量都必須是public的。,5、類或?qū)ο箨P系,代碼復用,類或?qū)ο笥心男╆P系?以Dog或Car為例如狗Dog是一種動物,狗有一個項圈(NeckIdentier),狗有四條腿(Leg),狗汪汪叫(WangWang),狗用棍子(Stick-工具,誰都可以用)追打老鼠(Cat)?,6、面向接口編程,假設你做的一個關于不同車的游戲,在這個游戲中,你可以選擇寶馬X6、比亞迪F6、哈佛H6等,它們可以越野模式,也可以運動模式前行,請你設計一下車這個類,然后讓它一會越野模式一會運動模式前行!如果你是車的司機,從對象調(diào)用的角度講,誰是調(diào)用者,誰是服務者,你是怎樣看你的車的行為的?,4、7、回顧關鍵字final修飾一個類:該類不能被繼承修飾一個方法:該方法不能被重載修飾一個變量:該變量是常量abstract修飾一個類:該類是抽象類,不能實例化,必須被繼承才能創(chuàng)建對象。修飾個方法:該方法必須被重寫。含有abstract方法的類必定是抽象類。,static用static聲明類方法和類變量。this可以出現(xiàn)在類的實例方法中,代表使用該方法的當前對象。this一般可以省略。但當成員變量與局部變量名字相同時,若要訪問成員變量,this不能省略。this方法不能出現(xiàn)在類方法中,因為類方法可以通過類名直接調(diào)用,此時,可能還沒有任何對象誕生。,static關鍵字用static聲明類方法和類變量。實例變量和類變量不同對象的實例變量被分配不同的內(nèi)存空間;但所有對象的類變量都分配相同的內(nèi)存空間。,如果一個類被加載,在沒有創(chuàng)建對象時,實例變量不會分配內(nèi)存,但類變量被分配了內(nèi)存,直到程序推出才釋放其所占有的空間;可以通過類名直接訪問非private修飾的類變量。類名.類變量,內(nèi)存模型:classTakecarestaticintx;inty;publicvoidop()TakecareA1=newTakecare();TakecareA2=newTakecare();,Static修飾變量注意事項:實現(xiàn)各實例間的通信。可以跟蹤創(chuàng)建的實例數(shù)相當于某些語言中的全局變量非private的靜態(tài)成員變量可采用類名直接訪問。,實例方法與類方法類的字節(jié)碼被加載到內(nèi)存后,類的實例方法沒有被分配入口地址。當類創(chuàng)建第一個對象后,才會分配相應的入口地址。以后創(chuàng)建的對象共享該入口地址。對象都消失時,該入口地址被取消。只要類被加載,即使沒有創(chuàng)建對象,類方法也會被分配入口地址。直到程序退出才取消該入口地址??梢酝ㄟ^類名調(diào)用非private修飾的類方法。兩種方法中的局部變量都是在執(zhí)行時才分配內(nèi)存空間。,前面講過,類方法不能操作實例變量和實例方法,請思考一下原因。,因為,類創(chuàng)建對象之前,實例成員變量還沒有分配內(nèi)存,實例方法也沒有入口地址。,classAinta;staticintb;voidf(intx,inty)a=x;/合法.b=y;/合法.staticvoidg(intz)b=23;/合法.a=z;/非法.,變量操作,classMemberstaticintclassVar;intinstanceVar;staticvoidsetClassVar(inti)classVar=i;/instanceVar=i;/類方法不能訪問實例變量staticintgetClassVar()returncla
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年尾礦綜合利用技術突破與生態(tài)修復模式探索報告
- 2025年制造業(yè)智能化生產(chǎn)線生產(chǎn)數(shù)據(jù)安全研究報告
- 內(nèi)蒙古興安盟2025屆七下英語期末調(diào)研模擬試題含答案
- 江蘇省淮安市清江浦區(qū)2025年英語八年級第二學期期末聯(lián)考試題含答案
- 閱讀教育實施成果與策略優(yōu)化
- 家庭教育促進法解讀(小學生版)
- 公正主題班會課課件
- 2024版經(jīng)導管主動脈瓣置換術臨床路徑專家共識解讀
- 2020年內(nèi)蒙古自治區(qū)消防應急燈具產(chǎn)品質(zhì)量監(jiān)督抽查方案
- 八年級家長會課件教學
- 2025年湖北高考真題化學試題(解析版)
- 2025-2030年中國停車場行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 林業(yè)碳匯項目開發(fā)流程與審核要點
- 安徽宣城職業(yè)技術學院招聘筆試真題2024
- 2025西山煤電井下崗位高校畢業(yè)生招聘500人(山西)筆試參考題庫附帶答案詳解
- 排污許可證申請流程
- 藥具培訓培訓試題及答案
- 重慶市大渡口區(qū)2023-2024學年四年級下學期數(shù)學期末測試卷(含答案)
- 2025年高考全國一卷寫作范文4篇
- 2025年人教版七年級下冊生物期末檢測試卷及答案
- 2024年貴州省貴陽市中考生物試題(含答案逐題解析)
評論
0/150
提交評論