Java就業(yè)培訓(xùn)教程張孝祥面向?qū)ο笊蟔第1頁
Java就業(yè)培訓(xùn)教程張孝祥面向?qū)ο笊蟔第2頁
Java就業(yè)培訓(xùn)教程張孝祥面向?qū)ο笊蟔第3頁
Java就業(yè)培訓(xùn)教程張孝祥面向?qū)ο笊蟔第4頁
Java就業(yè)培訓(xùn)教程張孝祥面向?qū)ο笊蟔第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

張孝祥IT課堂

-Java就業(yè)培訓(xùn)教程主講老師:□□□第1頁第三講面向?qū)ο螅ㄉ希┑?頁理解面向?qū)ο蟾拍蠲嫦蜻^程 在一種構(gòu)造體中定義窗口大小,位置,顏色,背景等屬性,對(duì)窗口操作函數(shù)與窗口本身定義沒有任何關(guān)系,如HideWindow,MoveWindow,MinimizeWindow,這些函數(shù)都需要接收一種代表要被操作窗口參數(shù),是一種謂語與賓語關(guān)系。面向?qū)ο蠖x窗口時(shí),除了要指定在面向過程中要求那些屬性,如大小,位置,顏色,背景等外,還要指定該窗口也許具有動(dòng)作,如隱藏,移動(dòng),最小化等。這些函數(shù)被調(diào)用時(shí),都是以某個(gè)窗口要隱藏,某個(gè)窗口要移動(dòng)語法格式來使用,這是一種主語與謂語關(guān)系。面向?qū)ο笕筇匦苑庋b(Encapsulation)繼承(Inheritance)多態(tài)(Polymorphism)

第3頁類與對(duì)象類是對(duì)某一類事物描述,是抽象、概念上定義;對(duì)象是實(shí)際存在該類事物每個(gè)個(gè)體,因而也稱實(shí)例(instance)。假如將對(duì)象比作汽車,那么類就是汽車設(shè)計(jì)圖紙。因此面向?qū)ο蟪绦蛟O(shè)計(jì)重點(diǎn)是類設(shè)計(jì),而不是對(duì)象設(shè)計(jì)。

第4頁類定義classPerson{ intage; voidshout() { System.out.println(“oh,mygod!Iam“+age); }}age是類屬性,也叫類組員變量。shout是辦法也叫類組員函數(shù)。shout辦法能夠直接訪問同一種類中age變量,假如一種辦法中有與組員變量同名局部變量,該辦法中對(duì)這個(gè)變量名訪問是局部變量,而不再是組員變量。第5頁對(duì)象產(chǎn)生Personp1=newPerson();執(zhí)行完后內(nèi)存狀態(tài)第6頁對(duì)象產(chǎn)生當(dāng)一種對(duì)象被創(chuàng)建時(shí),會(huì)對(duì)其中多種類型組員變量自動(dòng)進(jìn)行初始化賦值。除了基本數(shù)據(jù)類型之外都是變量類型都是引用類型,如上面Person及前面講過數(shù)組。

第7頁對(duì)象使用創(chuàng)建新對(duì)象之后,我們就能夠使用“對(duì)象名.對(duì)象組員”格式,來訪問對(duì)象組員(包括屬性和辦法)classTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson(); Personp2=newPerson(); p1.age=-30; p1.shout(); p2.shout(); }}上面程序運(yùn)行內(nèi)存布局如下列圖

第8頁對(duì)象生命周期第9頁對(duì)象比較“==”運(yùn)算符與equals()辦法區(qū)分如何比較兩個(gè)數(shù)組對(duì)象內(nèi)容是否相等第10頁匿名對(duì)象我們也能夠不定義對(duì)象句柄,而直接調(diào)用這個(gè)對(duì)象辦法。這樣對(duì)象叫做匿名對(duì)象,如:newPerson().shout();假如對(duì)一種對(duì)象只需要進(jìn)行一次辦法調(diào)用,那么就能夠使用匿名對(duì)象。我們經(jīng)常將匿名對(duì)象作為實(shí)參傳遞給一種函數(shù)調(diào)用。第11頁實(shí)現(xiàn)類封裝性假如外面程序能夠隨意修改一種類組員變量,會(huì)造成不可預(yù)料程序錯(cuò)誤,就象一種人身高,不能被外部隨意修改,只能通過多種攝取營(yíng)養(yǎng)辦法去修改這個(gè)屬性。在定義一種類組員(包括變量和辦法)時(shí),使用private關(guān)鍵字說明這個(gè)組員訪問權(quán)限,這個(gè)組員成了類私有組員,只能被這個(gè)類其他組員辦法調(diào)用,而不能被其他類中辦法所調(diào)用。第12頁實(shí)現(xiàn)類封裝性為了實(shí)現(xiàn)良好封裝性,我們一般將類組員變量申明為private,再通過public辦法來對(duì)這個(gè)變量進(jìn)行訪問。對(duì)一種變量操作,一般都有讀取和賦值操作,我們分別定義兩個(gè)辦法來實(shí)現(xiàn)這兩種操作,一種是getXxx()(Xxx表達(dá)要訪問組員變量名字),用來讀取這個(gè)組員變量操作,另外一種是setXxx()用來對(duì)這個(gè)組員變量賦值。一種類一般就是一種小模塊,我們應(yīng)當(dāng)讓模塊僅僅公開必須要讓外界懂得內(nèi)容,而隱藏其他一切內(nèi)容。我們?cè)谶M(jìn)行程序詳細(xì)設(shè)計(jì)時(shí),應(yīng)盡可能避免一種模塊直接修改或操作另一種模塊數(shù)據(jù),模塊設(shè)計(jì)追求強(qiáng)內(nèi)聚(許多功能盡可能在類內(nèi)部獨(dú)立完成,不讓外面干預(yù)),弱耦合(提供應(yīng)外部盡可能少辦法調(diào)用)。用總統(tǒng)指揮一支軍隊(duì)例子來說明這種效果。

第13頁類封裝所帶來長(zhǎng)處隱藏類實(shí)現(xiàn)細(xì)節(jié);讓使用者只能通過事先定制好辦法來訪問數(shù)據(jù),能夠方便地加入控制邏輯,限制對(duì)屬性不合理操作;便于修改,增強(qiáng)代碼可維護(hù)性;第14頁編程試驗(yàn):我們?cè)谝环N類中定義了一種private類型組員變量,接著產(chǎn)生了這個(gè)類兩個(gè)實(shí)例對(duì)象,請(qǐng)問第一種對(duì)象辦法中,能否以“第二個(gè)對(duì)象.組員”格式訪問第二個(gè)對(duì)象中那個(gè)private組員變量?第15頁構(gòu)造函數(shù)定義與作用構(gòu)造辦法特性它具有與類相同名稱;它不含返回值;它不能在辦法中用return語句返回一種值注意:在構(gòu)造辦法里不含返回值概念是不一樣于“void”,在定義構(gòu)造辦法時(shí)加了“void”,成果這個(gè)辦法就不再被自動(dòng)調(diào)用了。構(gòu)造辦法作用:當(dāng)一種類實(shí)例對(duì)象剛產(chǎn)生時(shí),這個(gè)類構(gòu)造辦法就會(huì)被自動(dòng)調(diào)用,我們能夠在這個(gè)辦法中加入要完成初始化工作代碼。這就仿佛我們要求每個(gè)“人”一出生就必須先洗澡,我們就能夠在“人”構(gòu)造辦法中加入完成“洗澡”程序代碼,于是每個(gè)“人”一出生就會(huì)自動(dòng)完成“洗澡”,程序就無須再在每個(gè)人剛出生時(shí)一種一種地告訴他們要“洗澡”了。第16頁構(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。第17頁p3=newPerson(“Tom”,18)內(nèi)存狀態(tài)變化過程分析第18頁構(gòu)造辦法某些細(xì)節(jié)在java每個(gè)類里都最少有一種構(gòu)造辦法,假如程序員沒有在一種類里定義構(gòu)造辦法,系統(tǒng)會(huì)自動(dòng)為這個(gè)類產(chǎn)生一種默認(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訪問修飾符嗎?第19頁this是什么?假如func2辦法被調(diào)用,一定是事先已有了一種存在對(duì)象,func2被作為那個(gè)對(duì)象辦法被使用。在func2內(nèi)部能引用別對(duì)象,同樣也能引用func2所屬那個(gè)對(duì)象。在func2中,自己所屬那個(gè)對(duì)象引用名稱是什么呢?this關(guān)鍵字在java程序里作用和它詞義很接近,它在函數(shù)內(nèi)部就是這個(gè)函數(shù)所屬對(duì)象引用變量。

第20頁this引用句柄寄存位置每個(gè)組員辦法內(nèi)部,都有一種this引用變量,指向調(diào)用這個(gè)辦法對(duì)象,類中組員辦法與this之間關(guān)系如圖第21頁this引用句柄應(yīng)用一種類中組員辦法能夠直接調(diào)用同類中其他組員,其實(shí)我們?cè)谝环N辦法內(nèi)部使用“this.其他組員”引用方式和直接使用“其他組員”效果是同樣,那this尚有多大作用呢?在有些情況下,我們還是非得用this關(guān)鍵字不可:讓類組員變量名和對(duì)其進(jìn)行賦值組員辦法形參變量同名是必要,這樣代碼誰看了都能明白這兩個(gè)變量是彼此有關(guān),老手看到函數(shù)定義,就能琢磨出函數(shù)中代碼,大大節(jié)省了他人和自己后來閱讀程序時(shí)間。假設(shè)我們有一種容器類和一種部件類,在容器類某個(gè)辦法中要?jiǎng)?chuàng)建部件類實(shí)例對(duì)象,而部件類構(gòu)造辦法要接收一種代表其所在容器參數(shù)。構(gòu)造辦法是在產(chǎn)生對(duì)象時(shí)被java系統(tǒng)自動(dòng)調(diào)用,我們不能在程序中象調(diào)用其他辦法同樣去調(diào)用構(gòu)造辦法。但我們能夠在一種構(gòu)造辦法里調(diào)用其他重載構(gòu)造辦法,不是用構(gòu)造辦法名,而是用this(參數(shù)列表)形式,根據(jù)其中參數(shù)列表,選擇對(duì)應(yīng)構(gòu)造辦法。第22頁垃圾回收過程分析c++中析構(gòu)辦法java中finalize()辦法System.gc作用第23頁函數(shù)參數(shù)傳遞

—基本數(shù)據(jù)類型參數(shù)傳遞

第24頁函數(shù)參數(shù)傳遞

—引用數(shù)據(jù)類型參數(shù)傳遞第25頁函數(shù)參數(shù)傳遞

—引用參數(shù)傳遞一種問題分析第26頁static靜態(tài)變量當(dāng)我們編寫一種類時(shí),其實(shí)就是在描述其對(duì)象屬性和行為,而并沒有產(chǎn)生實(shí)質(zhì)上對(duì)象,只有通過new關(guān)鍵字才會(huì)產(chǎn)生出對(duì)象,這時(shí)系統(tǒng)才會(huì)分派內(nèi)存空間給對(duì)象,其辦法才能夠供外部調(diào)用。我們有時(shí)候希望無論是否產(chǎn)生了對(duì)象或無論產(chǎn)生了多少對(duì)象情況下,某些特定數(shù)據(jù)在內(nèi)存空間里只有一份,例如所有中國(guó)人都有個(gè)國(guó)家名稱,每一種中國(guó)人都共享這個(gè)國(guó)家名稱,無須在每一種中國(guó)人實(shí)例對(duì)象中都單獨(dú)分派一種用于代表國(guó)家名稱變量。編寫使用靜態(tài)變量統(tǒng)計(jì)一種類產(chǎn)生實(shí)例對(duì)象個(gè)數(shù)程序第27頁static靜態(tài)辦法在靜態(tài)辦法里只能直接調(diào)用同類中其他靜態(tài)組員(包括變量和辦法),而不能直接訪問類中非靜態(tài)組員。這是由于,對(duì)于非靜態(tài)辦法和變量,需要先創(chuàng)建類實(shí)例對(duì)象后才可使用,而靜態(tài)辦法在使用前不用創(chuàng)建任何對(duì)象。靜態(tài)辦法不能以任何方式引用this和super關(guān)鍵字(super關(guān)鍵字在下一章解說)。與上面道理同樣,由于靜態(tài)辦法在使用前不用創(chuàng)建任何實(shí)例對(duì)象,當(dāng)靜態(tài)辦法被調(diào)用時(shí),this所引用對(duì)象主線就沒有產(chǎn)生。main()辦法是靜態(tài),因此JVM在執(zhí)行main辦法時(shí)不創(chuàng)建main辦法所在類實(shí)例對(duì)象,因而在main()辦法中,我們不能直接訪問該類中非靜態(tài)組員,必須創(chuàng)建該類一種實(shí)例對(duì)象后,才能通過這個(gè)對(duì)象去訪問類中非靜態(tài)組員,這種情況,我們?cè)诤髞砝又袝?huì)數(shù)次遇到。第28頁靜態(tài)代碼塊一種類中能夠使用不包括在任何辦法體中靜態(tài)代碼塊(staticblock),當(dāng)類被載入時(shí),靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次,靜態(tài)塊經(jīng)常用來進(jìn)行類屬性初始化。類中靜態(tài)代碼塊被自動(dòng)執(zhí)行,盡管我們產(chǎn)生了類多種實(shí)例對(duì)象,但其中靜態(tài)代碼塊只被執(zhí)行了一次。當(dāng)一種程序中用到了其他類,類是在第一次被使用時(shí)候才被裝載,而不是在程序啟動(dòng)時(shí)就裝載程序中所有也許要用到類。第29頁單態(tài)設(shè)計(jì)模式設(shè)計(jì)模式是在大量實(shí)踐中總結(jié)和理論化之后優(yōu)選代碼構(gòu)造、編程格調(diào)、以及處理問題思考方式。設(shè)計(jì)模式就想是典型棋譜,不一樣棋局,我們用不一樣棋譜,免得我們自己再去思考和摸索。失敗為成功之母,不過要以大量時(shí)間和精力為代價(jià),假如有成功經(jīng)驗(yàn)可借鑒,沒有人再樂意去甘冒失敗風(fēng)險(xiǎn),我們沒有理由不去理解和掌握設(shè)計(jì)模式,這也是Java開發(fā)者提升本身素質(zhì)一種較好選擇。使用設(shè)計(jì)模式也許會(huì)制約你去創(chuàng)新,不過真正故意義創(chuàng)新只能出自少數(shù)天才,雖然你就是那個(gè)天才,雖無須因循守舊,但也不也許完全不去理解和借鑒前人成功經(jīng)驗(yàn)。第30頁單態(tài)設(shè)計(jì)模式所謂類單態(tài)設(shè)計(jì)模式,就是采取一定辦法確保在整個(gè)軟件系統(tǒng)中,對(duì)某個(gè)類只能存在一種對(duì)象實(shí)例,并且該類只提供一種取得其對(duì)象實(shí)例辦法。假如我們要讓類在一種虛擬機(jī)中只能產(chǎn)生一種對(duì)象,我們首先必須將類構(gòu)造辦法訪問權(quán)限設(shè)置為private,這樣,就不能用new操作符在類外部產(chǎn)生類對(duì)象了,但在類內(nèi)部仍能夠產(chǎn)生該類對(duì)象。由于在類外部開始還無法得到類對(duì)象,只能調(diào)用該類某個(gè)靜態(tài)辦法以返回類內(nèi)部創(chuàng)建對(duì)象,靜態(tài)辦法只能訪問類中靜態(tài)組員變量,因此,指向類內(nèi)部產(chǎn)生該類對(duì)象變量也必須定義成靜態(tài)。第31頁理解main辦法語法由于java虛擬機(jī)需要調(diào)用類main()辦法,因此該辦法訪問權(quán)限必須是public,又由于java虛擬機(jī)在執(zhí)行main()辦法時(shí)無須創(chuàng)建對(duì)象,因此該辦法必須是static,該辦法接收一種String類型數(shù)組參數(shù),該數(shù)組中保存執(zhí)行java命令時(shí)傳遞給所運(yùn)行類參數(shù)。

第32頁內(nèi)部類 —在類中直接定義內(nèi)部類

嵌套類能夠直接訪問嵌套它類組員,包括private組員,不過嵌套類組員卻不能被嵌套它類直接訪問。在內(nèi)部類對(duì)象保存了一種對(duì)外部類對(duì)象引用,當(dāng)內(nèi)部類組員辦法中訪問某一變量時(shí),假如在該辦法和內(nèi)部類中都沒有定義過這個(gè)變量,內(nèi)部類中對(duì)this引用會(huì)被傳遞給那個(gè)外部類對(duì)象引用。第33頁內(nèi)部類 —在類中直接定義內(nèi)部類

假如用static修飾一種內(nèi)部類,這個(gè)類就相稱于是一種外部定義類,因此static內(nèi)部類中可申明static組員,不過,非static內(nèi)部類中組員是不能申明為static。static內(nèi)部類不能再使用外層封裝類非static組員變量,這個(gè)道理不難想象!因此static嵌套類很少使用。第34頁內(nèi)部類—在類中直接定義內(nèi)部類假如函數(shù)局部變量(函數(shù)形參也是局部變量),內(nèi)部類組員變量,外部類組員變量重名,我們應(yīng)當(dāng)按下面程序代碼所使用方式來明確指定我們真正要訪問變量。publicclassOuter{

privateintsize;

publicclassInner {

privateintsize;

publicvoiddoStuff(intsize) {

size++;//引用是doStuff函數(shù)形參 this.size++;//引用是Inner類中組員變量 Outer.this.size++;//引用Outer類中組員變量 } }}第35頁內(nèi)部類如何被外部引用classOuter{ privateintsize=10; publicclassInner { publicvoiddoStuff() { System.out.println(++size); } }}publicclassTestInner{ publicstaticvoidmain(String[]args) { Outerouter=newOuter(); Outer.Innerinner=outer.newInner(); inner.doStuff(); }}第36頁內(nèi)部類

—在辦法中定義內(nèi)部類嵌套類并非只能在類里定義,也能夠在幾個(gè)程序塊范圍之內(nèi)定義內(nèi)部類。例如,在辦法中,或甚至在for循環(huán)體內(nèi)部,都能夠定義嵌套類。在辦法中定義內(nèi)部類只能訪問辦法中final類型局部變量,用final定義局部變量相稱于是一種常量,它生

溫馨提示

  • 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)論