Java預(yù)熱班講義031.ppt_第1頁
Java預(yù)熱班講義031.ppt_第2頁
Java預(yù)熱班講義031.ppt_第3頁
Java預(yù)熱班講義031.ppt_第4頁
Java預(yù)熱班講義031.ppt_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、北京傳智播客教育 ,Java預(yù)熱班培訓(xùn)課程,第三講 面向?qū)ο螅ㄉ希?講師:徐文海,北京傳智播客教育 ,面向?qū)ο?什么是面向?qū)ο?我們生活的社會(huì)是由各種形態(tài)不同的事物所組成,而事物與 事物之間都存在著各種各樣的聯(lián)系,正是這樣的思想構(gòu)成了 面向?qū)ο缶幊趟枷氲幕A(chǔ)。 如何用對(duì)象去解決碰到的問題 在程序中用對(duì)象來描述現(xiàn)實(shí)的事物,每一個(gè)事物都在程序中 都對(duì)應(yīng)一個(gè)具體的對(duì)象,我們?cè)诔绦蛑袑?duì)對(duì)象進(jìn)行操作來模 擬現(xiàn)實(shí)中事物之間的關(guān)系,這就是所謂的萬物皆對(duì)象。 面向?qū)ο缶幊痰暮锰?代碼的復(fù)用性提高 使用者無須關(guān)心具體的實(shí)現(xiàn)細(xì)節(jié) 轉(zhuǎn)變程序員的角色,更加符合人的思維過慣,北京傳智播客教育 ,類的定義,為什么要定義類

2、 由于對(duì)象是虛擬出來的東西,是看不見摸不著的,我們需要在 程序中使用對(duì)象,就必須找到描述對(duì)象的方式,定義一個(gè)類就 可以解決這個(gè)問題。 什么是類 將一系列特征相似的對(duì)象中的共同屬性和方法抽象出來用一段 特殊的代碼來進(jìn)行描述,這段特殊的代碼我們就稱之為一個(gè)類 類使用class關(guān)鍵字來進(jìn)行定義,后面跟上類的名稱 如何通過類產(chǎn)生對(duì)象 使用new關(guān)鍵字根據(jù)定義好的類來創(chuàng)建對(duì)象。 對(duì)象稱之為類的實(shí)例,類是對(duì)象的抽象,北京傳智播客教育 ,類與對(duì)象,類是對(duì)某一類事物的描述,是抽象的、概念上的定義。 對(duì)象是實(shí)際存在的該類事物的每個(gè)個(gè)體,因而也稱實(shí)例(instance)。,如果將對(duì)象比作汽車,那么類就是汽車的設(shè)計(jì)

3、圖紙。所以面向?qū)ο蟪绦蛟O(shè)計(jì)的重點(diǎn)是類的設(shè)計(jì),而不是對(duì)象的設(shè)計(jì)。,北京傳智播客教育 ,設(shè)計(jì)類,class Person int age; void shout() System.out.println(“oh,my god! I am “ + age); age是類的屬性 ,也叫類成員變量 。 shout是方法也叫類的成員函數(shù)(成員方法)。 shout方法可以直接訪問同一個(gè)類中的age變量 ,如果一個(gè)方法中有與成員變量同名的局部變量,該方法中對(duì)這個(gè)變量名的訪問是局部變量,而不再是成員變量。,北京傳智播客教育 ,對(duì)象的產(chǎn)生,Person p1 = new Person();執(zhí)行完后的內(nèi)存狀態(tài),北京

4、傳智播客教育 ,成員變量初始化,當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),會(huì)對(duì)其中各種類型的成員變量自動(dòng)進(jìn)行初始 化賦值?;緮?shù)據(jù)類型初始化值為0,引用數(shù)據(jù)類型初始化值為null,北京傳智播客教育 ,對(duì)象的使用,Person p1 = new Person(); Person p2 =new Person(); p1.age = -30; p1.shout(); p2.shout(); /執(zhí)行完內(nèi)存中的狀態(tài),北京傳智播客教育 ,對(duì)象的生命周期,北京傳智播客教育 ,對(duì)象的生命周期,北京傳智播客教育 ,對(duì)象的生命周期,北京傳智播客教育 ,匿名對(duì)象,我們也可以不定義對(duì)象的句柄,而直接調(diào)用這個(gè)對(duì)象的方法。這樣的對(duì)象叫做匿名

5、對(duì)象, 如:new Person().shout(); 如果對(duì)一個(gè)對(duì)象只需要進(jìn)行一次方法調(diào)用,那么就可以使用匿名對(duì)象。 我們經(jīng)常將匿名對(duì)象作為實(shí)參傳遞給一個(gè)函數(shù)調(diào)用。,北京傳智播客教育 ,類的封裝,定義 所謂類的封裝就是將一組相似的對(duì)象所有共同屬性和方法都封裝 在一個(gè)類里面,這樣的類就可以用于將來描述同一類型的對(duì)象了。 封裝的特點(diǎn) 為了實(shí)現(xiàn)良好的封裝性,需要將類的屬性私有化(private),對(duì)外提供相應(yīng) 的公有的get和set方法,方便別人的使用。 強(qiáng)內(nèi)聚,弱耦合 封裝是保證軟件部件具有優(yōu)良模塊性的基礎(chǔ),編寫程序時(shí)要盡量避免模塊之間的 相互依賴,降低這種依賴在程序變動(dòng)時(shí)帶來的影響,這就是所謂

6、的“強(qiáng)內(nèi)聚,弱耦合” 面向?qū)ο蟮姆庋b就是把描述一個(gè)對(duì)象的屬性和行為的代碼封裝在一個(gè)類當(dāng)中,屬性 用變量定義,行為用方法來描述,方法可以直接訪問同一個(gè)類中的屬性,北京傳智播客教育 ,構(gòu)造函數(shù)的定義與作用,構(gòu)造函數(shù)的特征 函數(shù)的名稱與類相同 沒有返回值類型聲明 不能在方法中使用return語句返回一個(gè)值 注意:沒有返回值類型聲明不等同于”void”,void也是 一種返回值類型聲明,那就是沒有返回值。 構(gòu)造函數(shù)的作用: 當(dāng)我們使用new關(guān)鍵字來創(chuàng)建一個(gè)對(duì)象的時(shí)候,Java虛擬機(jī)會(huì)自動(dòng) 調(diào)用構(gòu)造函數(shù),我們可以在構(gòu)造函數(shù)中做一些初始化的事情。 例如,人一出生就要洗澡。,北京傳智播客教育 ,構(gòu)造函數(shù)的具

7、體應(yīng)用,構(gòu)造函數(shù)可以重載 構(gòu)造函數(shù)和一般的函數(shù)一樣,也可以重載,但參數(shù)列表必須不一致 構(gòu)造函數(shù)如何被調(diào)用 使用new關(guān)鍵字創(chuàng)建對(duì)象的時(shí)候,會(huì)自動(dòng)調(diào)用類的一個(gè)構(gòu)造函數(shù) 可以在一個(gè)類的構(gòu)造函數(shù)中使用this關(guān)鍵字去調(diào)用其他的構(gòu)造函數(shù) 在調(diào)用構(gòu)造函數(shù)時(shí),具體調(diào)用哪個(gè),就看括號(hào)里傳遞的實(shí)參類型 類必須定義構(gòu)造函數(shù) 每一個(gè)類都至少有一個(gè)構(gòu)造函數(shù),如果在定義類時(shí),沒有顯式地聲明任何構(gòu)造函數(shù),系統(tǒng)會(huì)自動(dòng)為這個(gè)類創(chuàng)建一個(gè)無參的構(gòu)造函數(shù),里面沒有任何代碼 構(gòu)造函數(shù)的訪問權(quán)限 在定義構(gòu)造函數(shù)時(shí),如無特殊需要,應(yīng)使用public關(guān)鍵字進(jìn)行修飾 在一些特殊的情況下會(huì)使用private關(guān)鍵字,北京傳智播客教育 ,thi

8、s關(guān)鍵字,this引用 this關(guān)鍵字一般用于方法內(nèi) this代表一個(gè)對(duì)象的引用 具體引用哪個(gè)對(duì)象,就看調(diào)用方法的是哪個(gè)對(duì)象 this關(guān)鍵字的應(yīng)用場(chǎng)景 當(dāng)在一個(gè)類中要明確指出使用對(duì)象自己的的變量或函數(shù)時(shí)就應(yīng)該加上this引用 ,此時(shí)this是指當(dāng)前對(duì)象自己。 當(dāng)你要把自己作為參數(shù)傳遞給別的對(duì)象時(shí),也可以用this關(guān)鍵字,此時(shí)this被作為參數(shù)傳遞。 在內(nèi)部類中也會(huì)經(jīng)常使用this關(guān)鍵字,此時(shí)this代表內(nèi)部類對(duì)象,如想引用外部類對(duì)象,this前面還需要加上外部類的類名。 在構(gòu)造函數(shù)中,可以使用this(實(shí)參)來調(diào)用該類的其他構(gòu)造函數(shù),此時(shí),應(yīng)注意,調(diào)用代碼只能在第一行,在別的方法中不能這樣調(diào)構(gòu)

9、造函數(shù),在一個(gè)構(gòu)造函數(shù)中只能調(diào)一個(gè)構(gòu)造函數(shù),北京傳智播客教育 ,函數(shù)的參數(shù)傳遞,基本數(shù)據(jù)類型在參數(shù)傳遞過程中值不會(huì)被改變 在程序運(yùn)行的過程中,將一個(gè)基本數(shù)據(jù)類型的變量作為參數(shù)傳遞給一個(gè)方法,當(dāng)方法執(zhí)行完畢后,變量的值不會(huì)發(fā)生改變,原因在于方法中改變的只是定義的形參,不會(huì)對(duì)主函數(shù)中的參數(shù)進(jìn)行改動(dòng)。 引用數(shù)據(jù)類型在參數(shù)傳遞的過程中,其值會(huì)被改變 在程序運(yùn)行的過程中將一個(gè)引用數(shù)據(jù)類型的變量傳遞給一個(gè)方法,在方法中對(duì)形參進(jìn)行操作,當(dāng)方法執(zhí)行完畢時(shí),變量發(fā)生了改變,原因很簡單,在方法中其實(shí)是通過地址訪問到對(duì)象,這時(shí)是針對(duì)對(duì)象進(jìn)行操作,而不是變量,說白了,變量中存的地址始終還是沒有改變,但是對(duì)象的狀態(tài)會(huì)發(fā)

10、生改變。,北京傳智播客教育 ,static關(guān)鍵字之靜態(tài)變量,用static修飾的變量為靜態(tài)變量 靜態(tài)變量被類的所有實(shí)例所共享 靜態(tài)變量可以使用 類名.變量名的方式訪問 靜態(tài)變量在類被加載時(shí)就完成了初始化,北京傳智播客教育 ,Static關(guān)鍵字之靜態(tài)方法,用static修飾的方法就是靜態(tài)方法 在類被加載后,就可以調(diào)用靜態(tài)方法了 可以使用類名.方法名的方式訪問 靜態(tài)方法內(nèi)部不能直接訪問外部非靜態(tài)的成員 靜態(tài)方法在類被加載后就可以調(diào)用了,而非靜態(tài)的成員需要?jiǎng)?chuàng)建對(duì)象之后才能訪問,所以當(dāng)然訪問不到 在靜態(tài)方法內(nèi)部,只能通過創(chuàng)建該類的對(duì)象來訪問外部的非static的方法。 靜態(tài)方法中,不能使用this關(guān)鍵

11、字,因?yàn)闆]有對(duì)象,this無從引用。 一般來講,方法為一種工具或者生產(chǎn)對(duì)象,我們就可以將方法設(shè)計(jì)為靜態(tài)的。 目的就是為了別人可以使用類名.方法名的方式調(diào)用我們?cè)O(shè)計(jì)的方法,而不需要自己 去創(chuàng)建對(duì)象。,北京傳智播客教育 ,靜態(tài)代碼塊,用static修飾的代碼塊為靜態(tài)代碼塊 靜態(tài)代碼塊在類被加載的時(shí)候就執(zhí)行了 靜態(tài)代碼塊一般用于做一些初始化的工作 靜態(tài)變量的初始化和靜態(tài)代碼塊的執(zhí)行哪個(gè)先? 注意:類什么時(shí)候被加載呢? 類是在第一次被使用的時(shí)候才進(jìn)行加載,而且只加載一次,java虛 擬機(jī)啟動(dòng)的時(shí)候不會(huì)把可能用到的類都加載進(jìn)來,也不可能預(yù)知程 序中將會(huì)使用到哪些類。,北京傳智播客教育 ,垃圾回收過程分析

12、,java中的finalize()方法 對(duì)象在被回收之前,java虛擬機(jī)會(huì)自動(dòng)調(diào)用finalize方法。 System.gc的作用 可以通過調(diào)用System.gc()來人工回收垃圾,北京傳智播客教育 ,什么是設(shè)計(jì)模式,針對(duì)某一問題的最佳解決方案,我們?cè)诔绦蛑蟹Q之為設(shè)計(jì)模式。 設(shè)計(jì)模式是在大量的實(shí)踐中總結(jié)和理論化之后優(yōu)選的代碼結(jié)構(gòu)、編程風(fēng)格、以及解決問題的思考方式。設(shè)計(jì)模式就像是經(jīng)典的棋譜,不同的棋局,我們用不同的棋譜,免得我們自己再去思考和摸索。,北京傳智播客教育 ,單態(tài)設(shè)計(jì)模式,定義 所謂類的單態(tài)設(shè)計(jì)模式,就是采取一定的方法保證在整個(gè)的軟件系統(tǒng) 中,對(duì)某個(gè)類只能存在一個(gè)對(duì)象實(shí)例,并且該類只提

13、供一個(gè)取得其對(duì) 象實(shí)例的方法。 單態(tài)設(shè)計(jì)模式的特征 將構(gòu)造方法私有化。 對(duì)外提供一個(gè)公有的get方法,讓別人通過此方法來獲得實(shí)例。 由于不能創(chuàng)建對(duì)象,所以get方法必須靜態(tài),這樣別人才能使用類名.方法名的方式訪問。 需要保證單例,所以要提供一個(gè)靜態(tài)變量記住一個(gè)實(shí)例,用于返回。 該實(shí)例應(yīng)該私有,禁止外界通過直接訪問進(jìn)行改動(dòng)。,北京傳智播客教育 ,理解main方法的語法,由于java虛擬機(jī)需要調(diào)用類的main()方法,所以該方法的訪問 權(quán)限必須是public,又因?yàn)閖ava虛擬機(jī)在執(zhí)行main()方法時(shí)不必 創(chuàng)建對(duì)象,所以該方法必須是static的,該方法接收一個(gè)String 類型的數(shù)組參數(shù),該數(shù)

14、組中保存執(zhí)行java命令時(shí)傳遞給所運(yùn)行 的類的參數(shù)。,北京傳智播客教育 ,內(nèi)部類,可以在類中定義類 在類里面定義的類稱之為內(nèi)部類,內(nèi)部類是外部類的一個(gè)成員 引用方式:Outer.Inner inner = new Outer().new Inner(); 內(nèi)部類可以直接訪問外部類的成員,而外部類不能直接訪問內(nèi)部類的成員 可以在方法中定義類 方法中定義的內(nèi)部類不能訪問方法中定義的局部變量,除非這個(gè)局部變量被聲明為final的 可以在方法中定義匿名內(nèi)部類 應(yīng)用場(chǎng)景:一次性使用 注意:匿名內(nèi)部類為當(dāng)前類名所表示的類的子類,北京傳智播客教育 ,static修飾的內(nèi)部類,static修飾的內(nèi)部類為靜態(tài)內(nèi)部類 非靜態(tài)的內(nèi)部類中不能聲明靜態(tài)的成員 因?yàn)殪o態(tài)成員不需要?jiǎng)?chuàng)建對(duì)象,可以通過類名.變量名的方式訪問,如果內(nèi)部類非靜態(tài),我們就不能通過.直接訪問內(nèi)部類,也就訪問不到static變量。 static修飾的內(nèi)部類中可以定義非static修飾的成員 static內(nèi)部類中不能訪問外部非static的成員,北京傳智播客教育 ,使用Java的文檔注釋,文檔注釋以“/*”開始,以“*/”標(biāo)志結(jié)束,相應(yīng)的信息和批注所對(duì)應(yīng)的

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論