版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、張孝祥IT課堂Java就業(yè)培訓(xùn)教程主講教師:第三講 面向?qū)ο笊狭私饷嫦驅(qū)ο蟮母拍蠲嫦蜻^(guò)程 在一個(gè)構(gòu)造體中定義窗口的大小,位置,顏色,背景等屬性,對(duì)窗口操作的函數(shù)與窗口本身的定義沒(méi)有任何關(guān)系,如HideWindow,MoveWindow,MinimizeWindow,這些函數(shù)都需求接受一個(gè)代表要被操作的窗口參數(shù) ,是一種謂語(yǔ)與賓語(yǔ)的關(guān)系 。面向?qū)ο?定義窗口時(shí),除了要指定在面向過(guò)程中規(guī)定的那些屬性,如大小,位置,顏色,背景等外,還要指定該窗口能夠具有的動(dòng)作 ,如隱藏,挪動(dòng),最小化等。這些函數(shù)被調(diào)用時(shí),都是以某個(gè)窗口要隱藏,某個(gè)窗口要挪動(dòng)的語(yǔ)法格式來(lái)運(yùn)用的 ,這是一種主語(yǔ)與謂語(yǔ)的關(guān)系。面向?qū)ο蟮娜?/p>
2、大特征封裝 (Encapsulation)承繼 (Inheritance)多態(tài) (Polymorphism) 類與對(duì)象 類是對(duì)某一類事物的描畫,是籠統(tǒng)的、概念上的定義;對(duì)象是實(shí)踐存在的該類事物的每個(gè)個(gè)體,因此也稱實(shí)例(instance)。 假設(shè)將對(duì)象比作汽車,那么類就是汽車的設(shè)計(jì)圖紙。所以面向?qū)ο蟪绦蛟O(shè)計(jì)的重點(diǎn)是類的設(shè)計(jì),而不是對(duì)象的設(shè)計(jì)。 類的定義class Personint age;void shout()System.out.println(“oh,my god! I am “ + age);age是類的屬性 ,也叫類成員變量 。shout是方法也叫類的成員函數(shù)。shout方法可以直接
3、訪問(wèn)同一個(gè)類中的age變量 ,假設(shè)一個(gè)方法中有與成員變量同名的部分變量,該方法中對(duì)這個(gè)變量名的訪問(wèn)是部分變量,而不再是成員變量。 對(duì)象的產(chǎn)生Person p1 = new Person();執(zhí)行完后的內(nèi)存形狀對(duì)象的產(chǎn)生當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),會(huì)對(duì)其中各種類型的成員變量自動(dòng)進(jìn)展初始化賦值。除了根本數(shù)據(jù)類型之外的都是變量類型都是援用類型,如上面的Person及前面講過(guò)的數(shù)組。 對(duì)象的運(yùn)用創(chuàng)建新的對(duì)象之后,我們就可以運(yùn)用“ 對(duì)象名.對(duì)象成員 的格式,來(lái)訪問(wèn)對(duì)象的成員包括屬性和方法 class TestPersonpublic static void main(String args) Person p1
4、 = new Person();Person p2 =new Person();p1.age = -30;p1.shout();p2.shout();上面程序運(yùn)轉(zhuǎn)的內(nèi)存規(guī)劃如以下圖 對(duì)象的生命周期 對(duì)象的比較 “=運(yùn)算符與equals()方法的區(qū)別怎樣比較兩個(gè)數(shù)組對(duì)象的內(nèi)容能否相等 匿名對(duì)象 我們也可以不定義對(duì)象的句柄,而直接調(diào)用這個(gè)對(duì)象的方法。這樣的對(duì)象叫做匿名對(duì)象, 如:new Person().shout(); 假設(shè)對(duì)一個(gè)對(duì)象只需求進(jìn)展一次方法調(diào)用,那么就可以運(yùn)用匿名對(duì)象。 我們經(jīng)常將匿名對(duì)象作為實(shí)參傳送給一個(gè)函數(shù)調(diào)用。 實(shí)現(xiàn)類的封裝性 假設(shè)外面的程序可以隨意修正一個(gè)類的成員變量,會(huì)呵斥
5、不可預(yù)料的程序錯(cuò)誤,就象一個(gè)人的身高,不能被外部隨意修正,只能經(jīng)過(guò)各種攝取營(yíng)養(yǎng)的方法去修正這個(gè)屬性。 在定義一個(gè)類的成員包括變量和方法時(shí),運(yùn)用private關(guān)鍵字闡明這個(gè)成員的訪問(wèn)權(quán)限,這個(gè)成員成了類的私有成員,只能被這個(gè)類的其他成員方法調(diào)用,而不能被其他的類中的方法所調(diào)用。 實(shí)現(xiàn)類的封裝性 為了實(shí)現(xiàn)良好的封裝性,我們通常將類的成員變量聲明為private,再經(jīng)過(guò)public的方法來(lái)對(duì)這個(gè)變量進(jìn)展訪問(wèn)。對(duì)一個(gè)變量的操作,普通都有讀取和賦值操作,我們分別定義兩個(gè)方法來(lái)實(shí)現(xiàn)這兩種操作,一個(gè)是getXxx()Xxx表示要訪問(wèn)的成員變量的名字,用來(lái)讀取這個(gè)成員變量操作,另外一個(gè)是setXxx()用來(lái)對(duì)
6、這個(gè)成員變量賦值。一個(gè)類通常就是一個(gè)小的模塊,我們應(yīng)該讓模塊僅僅公開(kāi)必需求讓外界知道的內(nèi)容,而隱藏其它一切內(nèi)容。我們?cè)谶M(jìn)展程序的詳細(xì)設(shè)計(jì)時(shí),應(yīng)盡量防止一個(gè)模塊直接修正或操作另一個(gè)模塊的數(shù)據(jù),模塊設(shè)計(jì)追求強(qiáng)內(nèi)聚許多功能盡量在類的內(nèi)部獨(dú)立完成,不讓外面干涉,弱耦合提供應(yīng)外部盡量少的方法調(diào)用。用總統(tǒng)指揮一支軍隊(duì)的例子來(lái)闡明這種效果。 類的封裝所帶來(lái)的優(yōu)點(diǎn) 隱藏類的實(shí)現(xiàn)細(xì)節(jié);讓運(yùn)用者只能經(jīng)過(guò)事先定制好的方法來(lái)訪問(wèn)數(shù)據(jù),可以方便地參與控制邏輯,限制對(duì)屬性的不合理操作;便于修正,加強(qiáng)代碼的可維護(hù)性;編程實(shí)驗(yàn):我們?cè)谝粋€(gè)類中定義了一個(gè)private類型的成員變量,接著產(chǎn)生了這個(gè)類的兩個(gè)實(shí)例對(duì)象,請(qǐng)問(wèn)第一個(gè)對(duì)
7、象的方法中,能否以“第二個(gè)對(duì)象.成員的格式訪問(wèn)第二個(gè)對(duì)象中的那個(gè)private成員變量? 構(gòu)造函數(shù)的定義與作用 構(gòu)造方法的特征它具有與類一樣的稱號(hào);它不含前往值;它不能在方法中用return語(yǔ)句前往一個(gè)值留意:在構(gòu)造方法里不含前往值的概念是不同于“void的,在定義構(gòu)造方法時(shí)加了“void,結(jié)果這個(gè)方法就不再被自動(dòng)調(diào)用了。構(gòu)造方法的作用:當(dāng)一個(gè)類的實(shí)例對(duì)象剛產(chǎn)生時(shí),這個(gè)類的構(gòu)造方法就會(huì)被自動(dòng)調(diào)用,我們可以在這個(gè)方法中參與要完成初始化任務(wù)的代碼。這就好似我們規(guī)定每個(gè)“人一出生就必需先洗澡,我們就可以在“人的構(gòu)造方法中參與完成“洗澡的程序代碼,于是每個(gè)“人一出生就會(huì)自動(dòng)完成“洗澡,程序就不用再在每
8、個(gè)人剛出生時(shí)一個(gè)一個(gè)地通知他們要“洗澡了。 構(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=new Person(“Tom,18);語(yǔ)句,會(huì)做這樣幾件事:創(chuàng)建指定類的新實(shí)例對(duì)象,在堆內(nèi)存中為實(shí)例對(duì)象分配內(nèi)存空間,并調(diào)用指定類的構(gòu)造方法,最后將實(shí)例對(duì)象的首地址賦值給援用變量p3。 p3=new Person(“Tom,18) 的內(nèi)存形狀變化過(guò)程分析構(gòu)造方法的一些細(xì)節(jié) 在java每個(gè)類里都至少
9、有一個(gè)構(gòu)造方法,假設(shè)程序員沒(méi)有在一個(gè)類里定義構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)為這個(gè)類產(chǎn)生一個(gè)默許的構(gòu)造方法,這個(gè)默許構(gòu)造方法沒(méi)有參數(shù),在其方法體中也沒(méi)有任何代碼,即什么也不做。 由于系統(tǒng)提供的默許構(gòu)造方法往往不能滿足編程者的需求,我們可以本人定義類的構(gòu)造方法,來(lái)滿足我們的需求,一旦編程者為該類定義了構(gòu)造方法,系統(tǒng)就不再提供默許的構(gòu)造方法了。 聲明構(gòu)造方法,如無(wú)特殊需求,應(yīng)運(yùn)用public關(guān)鍵字,在我們前面例子中,可以運(yùn)用private訪問(wèn)修飾符嗎? this是什么? 假設(shè)func2方法被調(diào)用 ,一定是事先曾經(jīng)有了一個(gè)存在的對(duì)象,func2被作為那個(gè)對(duì)象的方法被運(yùn)用。 在func2內(nèi)部能援用別的對(duì)象 ,同樣
10、也能援用func2所屬的那個(gè)對(duì)象。在func2中,本人所屬的那個(gè)對(duì)象的援用稱號(hào)是什么呢? 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ùn)用一個(gè)類中的成員方法可以直接調(diào)用同類中的其他成員,其實(shí)我們?cè)谝粋€(gè)方法內(nèi)部運(yùn)用“this.其他成員的援用方式和直接運(yùn)用“其他成員的效果是一樣的,那this還有多大的作用呢?在有些情況下,我們還是非得用this關(guān)鍵字不可的 :讓類的成員變量名和對(duì)其進(jìn)展賦值的成
11、員方法的形參變量同名是必要的,這樣的代碼誰(shuí)看了都能明白這兩個(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)造方法。 渣滓回收過(guò)程分析c+中的析構(gòu)方法 java中的finalize()
12、方法 System.gc的作用 函數(shù)的參數(shù)傳送根本數(shù)據(jù)類型的參數(shù)傳送 函數(shù)的參數(shù)傳送援用數(shù)據(jù)類型的參數(shù)傳送函數(shù)的參數(shù)傳送援用參數(shù)傳送的一個(gè)問(wèn)題分析static靜態(tài)變量 當(dāng)我們編寫一個(gè)類時(shí),其實(shí)就是在描畫其對(duì)象的屬性和行為,而并沒(méi)有產(chǎn)生本質(zhì)上的對(duì)象,只需經(jīng)過(guò)new關(guān)鍵字才會(huì)產(chǎn)生出對(duì)象,這時(shí)系統(tǒng)才會(huì)分配內(nèi)存空間給對(duì)象,其方法才可以供外部調(diào)用。我們有時(shí)候希望無(wú)論能否產(chǎn)生了對(duì)象或無(wú)論產(chǎn)生了多少對(duì)象的情況下,某些特定的數(shù)據(jù)在內(nèi)存空間里只需一份,例如一切的中國(guó)人都有個(gè)國(guó)家稱號(hào),每一個(gè)中國(guó)人都共享這個(gè)國(guó)家稱號(hào),不用在每一個(gè)中國(guó)人的實(shí)例對(duì)象中都單獨(dú)分配一個(gè)用于代表國(guó)家稱號(hào)的變量。編寫運(yùn)用靜態(tài)變量統(tǒng)計(jì)一個(gè)類產(chǎn)生
13、的實(shí)例對(duì)象的個(gè)數(shù)的程序static靜態(tài)方法在靜態(tài)方法里只能直接調(diào)用同類中其它的靜態(tài)成員包括變量和方法,而不能直接訪問(wèn)類中的非靜態(tài)成員。這是由于,對(duì)于非靜態(tài)的方法和變量,需求先創(chuàng)建類的實(shí)例對(duì)象后才可運(yùn)用,而靜態(tài)方法在運(yùn)用前不用創(chuàng)建任何對(duì)象。 靜態(tài)方法不能以任何方式援用this和super關(guān)鍵字super關(guān)鍵字在下一章講解。與上面的道理一樣,由于靜態(tài)方法在運(yùn)用前不用創(chuàng)建任何實(shí)例對(duì)象,當(dāng)靜態(tài)方法被調(diào)用時(shí),this所援用的對(duì)象根本就沒(méi)有產(chǎn)生。 main() 方法是靜態(tài)的,因此JVM在執(zhí)行main方法時(shí)不創(chuàng)建main方法所在的類的實(shí)例對(duì)象,因此在main()方法中,我們不能直接訪問(wèn)該類中的非靜態(tài)成員,必
14、需創(chuàng)建該類的一個(gè)實(shí)例對(duì)象后,才干經(jīng)過(guò)這個(gè)對(duì)象去訪問(wèn)類中的非靜態(tài)成員,這種情況,我們?cè)谝院蟮睦又袝?huì)多次碰到。靜態(tài)代碼塊 一個(gè)類中可以運(yùn)用不包含在任何方法體中的靜態(tài)代碼塊(static block ),當(dāng)類被載入時(shí),靜態(tài)代碼塊被執(zhí)行,且只被執(zhí)行一次,靜態(tài)塊經(jīng)常用來(lái)進(jìn)展類屬性的初始化。 類中的靜態(tài)代碼塊被自動(dòng)執(zhí)行,雖然我們產(chǎn)生了類的多個(gè)實(shí)例對(duì)象,但其中的靜態(tài)代碼塊只被執(zhí)行了一次。當(dāng)一個(gè)程序中用到了其他的類,類是在第一次被運(yùn)用的時(shí)候才被裝載,而不是在程序啟動(dòng)時(shí)就裝載程序中一切能夠要用到的類。 單態(tài)設(shè)計(jì)方式 設(shè)計(jì)方式是在大量的實(shí)際中總結(jié)和實(shí)際化之后優(yōu)選的代碼構(gòu)造、編程風(fēng)格、以及處理問(wèn)題的思索方式。設(shè)計(jì)
15、方式就想是經(jīng)典的棋譜,不同的棋局,我們用不同的棋譜,免得我們本人再去思索和探求。失敗為勝利之母,但是要以大量的時(shí)間和精神為代價(jià),假設(shè)有勝利閱歷可自創(chuàng),沒(méi)有人再情愿去甘冒失敗的風(fēng)險(xiǎn),我們沒(méi)有理由不去了解和掌握設(shè)計(jì)方式,這也是Java開(kāi)發(fā)者提高本身素質(zhì)的一個(gè)很好選擇。運(yùn)用設(shè)計(jì)方式也許會(huì)制約他去創(chuàng)新,不過(guò)真正有意義的創(chuàng)新只能出自少數(shù)天才,即使他就是那個(gè)天才,雖不用因循守舊,但也不能夠完全不去了解和自創(chuàng)前人的勝利閱歷。單態(tài)設(shè)計(jì)方式 所謂類的單態(tài)設(shè)計(jì)方式,就是采取一定的方法保證在整個(gè)的軟件系統(tǒng)中,對(duì)某個(gè)類只能存在一個(gè)對(duì)象實(shí)例,并且該類只提供一個(gè)獲得其對(duì)象實(shí)例的方法。假設(shè)我們要讓類在一個(gè)虛擬機(jī)中只能產(chǎn)生一
16、個(gè)對(duì)象,我們首先必需將類的構(gòu)造方法的訪問(wèn)權(quán)限設(shè)置為private,這樣,就不能用new 操作符在類的外部產(chǎn)生類的對(duì)象了,但在類內(nèi)部仍可以產(chǎn)生該類的對(duì)象。由于在類的外部開(kāi)場(chǎng)還無(wú)法得到類的對(duì)象,只能調(diào)用該類的某個(gè)靜態(tài)方法以前往類內(nèi)部創(chuàng)建的對(duì)象,靜態(tài)方法只能訪問(wèn)類中的靜態(tài)成員變量,所以,指向類內(nèi)部產(chǎn)生的該類對(duì)象的變量也必需定義成靜態(tài)的。 了解main方法的語(yǔ)法 由于java虛擬機(jī)需求調(diào)用類的main()方法,所以該方法的訪問(wèn)權(quán)限必需是public,又由于java虛擬機(jī)在執(zhí)行main()方法時(shí)不用創(chuàng)建對(duì)象,所以該方法必需是static的,該方法接納一個(gè)String類型的數(shù)組參數(shù),該數(shù)組中保管執(zhí)行jav
17、a命令時(shí)傳送給所運(yùn)轉(zhuǎn)的類的參數(shù)。 內(nèi)部類在類中直接定義的內(nèi)部類 嵌套類可以直接訪問(wèn)嵌套它的類的成員,包括private成員,但是嵌套類的成員卻不能被嵌套它的類直接訪問(wèn)。在內(nèi)部類對(duì)象保管了一個(gè)對(duì)外部類對(duì)象的援用,當(dāng)內(nèi)部類的成員方法中訪問(wèn)某一變量時(shí),假設(shè)在該方法和內(nèi)部類中都沒(méi)有定義過(guò)這個(gè)變量,內(nèi)部類中對(duì)this的援用會(huì)被傳送給那個(gè)外部類對(duì)象的援用。內(nèi)部類在類中直接定義的內(nèi)部類 假設(shè)用static修飾一個(gè)內(nèi)部類,這個(gè)類就相當(dāng)于是一個(gè)外部定義的類,所以static的內(nèi)部類中可聲明static成員,但是,非static的內(nèi)部類中的成員是不能聲明為static的。static的內(nèi)部類不能再運(yùn)用外層封裝類的
18、非static的成員變量,這個(gè)道理不難想象!所以static嵌套類很少運(yùn)用。 內(nèi)部類 在類中直接定義的內(nèi)部類假設(shè)函數(shù)的部分變量函數(shù)的形參也是部分變量,內(nèi)部類的成員變量,外部類的成員變量重名,我們應(yīng)該按下面的程序代碼所運(yùn)用的方式來(lái)明確指定我們真正要訪問(wèn)的變量。 public class Outer private int size; public class Inner private int size; public void doStuff( int size) size+; / 援用的是doStuff函數(shù)的形參 this.size+; /援用的是Inner類中的成員變量 Outer.thi
19、s.size+; / 援用的Outer類中的成員變量 內(nèi)部類如何被外部援用 class Outer private int size=10; public class Inner public void doStuff() System.out.println(+size); public class TestInner public static void main( String args) Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); inner.doStuff(); 內(nèi)部類在方法中定義的內(nèi)部類嵌套類并非只能在類里定義,也可以在幾個(gè)程序塊的范圍之內(nèi)定義內(nèi)部類。例如,在方法
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度雪花啤酒區(qū)域獨(dú)家代理合同范本3篇
- 2025年度物流行業(yè)融資擔(dān)保協(xié)議3篇
- 教育科技推動(dòng)農(nóng)業(yè)機(jī)械化發(fā)展的路徑研究
- 教育行業(yè)在宏觀經(jīng)濟(jì)下的投資前景分析
- 2025年度綠色建筑施工現(xiàn)場(chǎng)臨時(shí)用電安全保障協(xié)議3篇
- 家用醫(yī)療器械的選購(gòu)與使用注意事項(xiàng)
- 教育行業(yè)中的創(chuàng)新型課程教材與教具設(shè)計(jì)研究
- 實(shí)驗(yàn)教學(xué)在培養(yǎng)學(xué)生批判性思維中的作用
- 教育科技融合下的創(chuàng)新創(chuàng)業(yè)實(shí)踐
- 2025年度育嬰師實(shí)習(xí)實(shí)訓(xùn)合同范本下載3篇
- 第二章 運(yùn)營(yíng)管理戰(zhàn)略
- 《三本白皮書》全文內(nèi)容及應(yīng)知應(yīng)會(huì)知識(shí)點(diǎn)
- 專題14 思想方法專題:線段與角計(jì)算中的思想方法壓軸題四種模型全攻略(解析版)
- 醫(yī)院外來(lái)器械及植入物管理制度(4篇)
- 港口與港口工程概論
- 《念珠菌感染的治療》課件
- 門店裝修設(shè)計(jì)手冊(cè)
- 考研計(jì)算機(jī)學(xué)科專業(yè)基礎(chǔ)(408)研究生考試試卷與參考答案(2025年)
- 2024護(hù)理個(gè)人年終總結(jié)
- 海南省申論真題2020年(縣級(jí)及以上)
- 蛇年金蛇賀歲
評(píng)論
0/150
提交評(píng)論