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),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

6、的“強(qiáng)內(nèi)聚,弱耦合” 面向?qū)ο蟮姆庋b就是把描述一個對象的屬性和行為的代碼封裝在一個類當(dāng)中,屬性 用變量定義,行為用方法來描述,方法可以直接訪問同一個類中的屬性,北京傳智播客教育 ,構(gòu)造函數(shù)的定義與作用,構(gòu)造函數(shù)的特征 函數(shù)的名稱與類相同 沒有返回值類型聲明 不能在方法中使用return語句返回一個值 注意:沒有返回值類型聲明不等同于”void”,void也是 一種返回值類型聲明,那就是沒有返回值。 構(gòu)造函數(shù)的作用: 當(dāng)我們使用new關(guān)鍵字來創(chuàng)建一個對象的時候,Java虛擬機(jī)會自動 調(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)建對象的時候,會自動調(diào)用類的一個構(gòu)造函數(shù) 可以在一個類的構(gòu)造函數(shù)中使用this關(guān)鍵字去調(diào)用其他的構(gòu)造函數(shù) 在調(diào)用構(gòu)造函數(shù)時,具體調(diào)用哪個,就看括號里傳遞的實(shí)參類型 類必須定義構(gòu)造函數(shù) 每一個類都至少有一個構(gòu)造函數(shù),如果在定義類時,沒有顯式地聲明任何構(gòu)造函數(shù),系統(tǒng)會自動為這個類創(chuàng)建一個無參的構(gòu)造函數(shù),里面沒有任何代碼 構(gòu)造函數(shù)的訪問權(quán)限 在定義構(gòu)造函數(shù)時,如無特殊需要,應(yīng)使用public關(guān)鍵字進(jìn)行修飾 在一些特殊的情況下會使用private關(guān)鍵字,北京傳智播客教育 ,thi

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

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

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

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

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

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

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

溫馨提示

  • 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

提交評論