Java基礎(chǔ)實(shí)踐教程-類與對(duì)象_第1頁(yè)
Java基礎(chǔ)實(shí)踐教程-類與對(duì)象_第2頁(yè)
Java基礎(chǔ)實(shí)踐教程-類與對(duì)象_第3頁(yè)
Java基礎(chǔ)實(shí)踐教程-類與對(duì)象_第4頁(yè)
Java基礎(chǔ)實(shí)踐教程-類與對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

3.1面向過(guò)程與面向?qū)ο蟮母拍?.2類與對(duì)象的定義和使用3.3訪問(wèn)修飾符3.4構(gòu)造方法3.5this關(guān)鍵字3.6static關(guān)鍵字人們?cè)谔剿骺陀^世界的時(shí)候,為了更加方便地描述客觀事物,會(huì)對(duì)事物進(jìn)行分門別類。人們把具有相同屬性、特性或者用途的事物歸為一類,在這個(gè)類中的每個(gè)個(gè)體都具有該類的所有特征。這種思維其實(shí)就是面向?qū)ο蟮乃季S,它能夠清晰明了地描述事物的特點(diǎn)和關(guān)系,同時(shí)便于研究和使用。其實(shí),面向?qū)ο蟮木幊趟枷刖驮从谌藗儗?duì)客觀世界的認(rèn)知思維。Java語(yǔ)言是一門純面向?qū)ο蟮母呒?jí)編程語(yǔ)言,它具有抽象、封裝、繼承和多態(tài)四大特性。從“面向?qū)ο蟆钡拿种芯涂梢钥吹綄?duì)象在Java語(yǔ)言中的重要性。實(shí)際上,Java語(yǔ)言最核心的概念就是類和對(duì)象,它們是實(shí)現(xiàn)上述四大特性的基石。本章圍繞類和對(duì)象這兩個(gè)概念重點(diǎn)介紹類的抽象和封裝。3.1面向過(guò)程與面向?qū)ο蟮母拍?.1.1面向過(guò)程與面向?qū)ο缶幊趟枷敫呒?jí)編程語(yǔ)言分為面向過(guò)程和面向?qū)ο髢深愓Z(yǔ)言,面向過(guò)程的編程思想是按照事物發(fā)展的先后順序把過(guò)程分成幾個(gè)步驟,每個(gè)步驟執(zhí)行一段相對(duì)獨(dú)立的代碼處理一部分?jǐn)?shù)據(jù),相當(dāng)于把問(wèn)題的處理過(guò)程拆分成一個(gè)個(gè)的方法和數(shù)據(jù),然后按照一定的順序執(zhí)行。通俗而言,面向過(guò)程編程就是通過(guò)創(chuàng)建變量和方法,并使用多個(gè)方法協(xié)同處理數(shù)據(jù)的過(guò)程。而面向?qū)ο蟮木幊趟枷胧前芽陀^世界中具有相同屬性的事物抽象成類的概念,在類中描繪該類事物共有的屬性(變量)和行為(方法)。該類事物中的每個(gè)個(gè)體就是一個(gè)對(duì)象,每個(gè)對(duì)象可以有自己的屬性值,同時(shí)可以調(diào)用類中的方法。然后在待處理的問(wèn)題中創(chuàng)建一個(gè)個(gè)的對(duì)象,通過(guò)多個(gè)對(duì)象的相互配合來(lái)實(shí)現(xiàn)應(yīng)用程序的功能。面向過(guò)程編程和面向?qū)ο缶幊潭际前凑找欢ǖ倪壿嬳樞蛘{(diào)用預(yù)設(shè)的方法解決問(wèn)題。但不同的是,面向過(guò)程編程的基本單元是方法,面向?qū)ο缶幊痰幕締卧穷?,通過(guò)創(chuàng)建類的對(duì)象來(lái)調(diào)用類中定義的方法。當(dāng)要處理的事務(wù)比較簡(jiǎn)單時(shí),使用面向過(guò)程編程相對(duì)簡(jiǎn)潔。但如果需要處理的事務(wù)繁雜,那么每個(gè)步驟都要單獨(dú)定義一個(gè)方法,在大多時(shí)候方法還不能通用,此時(shí)使用面向?qū)ο蟮木幊谭椒ň蜁?huì)顯得簡(jiǎn)單明了。此外,在代碼后續(xù)的擴(kuò)展和維護(hù)上,面向?qū)ο蟮木幊谭椒ǜ尤菀?。面向過(guò)程和面向?qū)ο缶幊谭绞降膶?duì)比如表3-1-1所示。3.1.2類與對(duì)象的概念類和對(duì)象是面向?qū)ο缶幊痰暮诵母拍?。其中類是?duì)客觀世界中某一類事物的抽象,在描述這類事物的時(shí)候使用到了屬性和行為。對(duì)象是類的實(shí)例化。類是一個(gè)抽象的概念,是對(duì)象的模板,而對(duì)象是一個(gè)具體的實(shí)例,是類的實(shí)體。在代碼實(shí)現(xiàn)時(shí),屬性使用變量來(lái)描述,行為使用函數(shù)來(lái)描述。面向?qū)ο缶幊痰倪^(guò)程就是根據(jù)需求創(chuàng)建許多不同的類,然后創(chuàng)建每個(gè)類的對(duì)象,每個(gè)對(duì)象都有各自的數(shù)據(jù)值,通過(guò)調(diào)用類中的方法來(lái)實(shí)現(xiàn)一定的功能邏輯。在Java編程中“一切事物皆對(duì)象”,客觀世界中的所有事物都可以通過(guò)類來(lái)抽象,通過(guò)對(duì)象來(lái)描述。例如,可以創(chuàng)建天氣類來(lái)描述天氣的屬性和行為,可以創(chuàng)建一個(gè)算法類來(lái)描述算法的屬性和行為。在定義類的時(shí)候,并不是這類事物的屬性和行為都需要寫進(jìn)去,也并不是必須同時(shí)具有屬性和行為,而是根據(jù)編程的需求填寫。當(dāng)類定義好之后,就可以創(chuàng)建該類的對(duì)象了。3.2類與對(duì)象的定義和使用3.2.2對(duì)象的創(chuàng)建和使用類只是聲明了一種自定義的引用數(shù)據(jù)類型,在編程時(shí)只有類是不夠的,還需要?jiǎng)?chuàng)建類的對(duì)象。Java類的對(duì)象和數(shù)組相似,都是引用數(shù)據(jù)類型,因此它也符合數(shù)組定義的步驟,即先聲明后實(shí)例化。在編寫代碼時(shí)可以使用兩行代碼,也可以合并成一行代碼。Java對(duì)象的創(chuàng)建格式有如下三種:這三種形式基本沒(méi)有區(qū)別,其中第三種形式更加簡(jiǎn)潔。只是在某些場(chǎng)合使用第二種形式編程會(huì)更加方便些。當(dāng)聲明一個(gè)Student類的對(duì)象stu時(shí),JVM在內(nèi)存空間為其開(kāi)辟一個(gè)存儲(chǔ)單元,該單元的默認(rèn)值為null。當(dāng)實(shí)例化一個(gè)對(duì)象時(shí),在內(nèi)存里面就會(huì)開(kāi)辟另一個(gè)空間,里面存儲(chǔ)該對(duì)象的屬性值,同時(shí)將這個(gè)空間的存儲(chǔ)地址賦值到stu變量的存儲(chǔ)單元,如圖3-2-1所示。由此可知,對(duì)象本身存儲(chǔ)的是一個(gè)內(nèi)存單元的地址,這個(gè)地址對(duì)應(yīng)的內(nèi)存空間才是真正存儲(chǔ)對(duì)象屬性值的地方。在Java語(yǔ)言中引用數(shù)據(jù)類型的變量在內(nèi)存中存儲(chǔ)時(shí)基本都是這種模式,如數(shù)組和枚舉等。對(duì)象實(shí)例化后就可以使用本類中的成員了,它的語(yǔ)法規(guī)則為:此外,也可以創(chuàng)建類類型的數(shù)組,它的語(yǔ)法規(guī)則與基本數(shù)據(jù)類型的數(shù)組一致。3.3訪問(wèn)修飾符為了實(shí)現(xiàn)對(duì)數(shù)據(jù)的封裝和保護(hù),在Java語(yǔ)言中定義了類成員的訪問(wèn)修飾符,也叫訪問(wèn)控制符,用來(lái)控制成員能夠被訪問(wèn)的范圍。訪問(wèn)修飾符有以下四種:(1)private(私有的):只能在當(dāng)前類中可訪問(wèn)。(2)default(缺省的):不用任何訪問(wèn)修飾符,也稱作默認(rèn)訪問(wèn)修飾符。在當(dāng)前包內(nèi)可訪問(wèn)。(3)protected(保護(hù)的):在當(dāng)前類、當(dāng)前包以及不同包里面的子類中可訪問(wèn)。(4)public(公有的):所有類都能訪問(wèn)。表3-3-1總結(jié)了這四種訪問(wèn)修飾符的權(quán)限控制范圍。這里需要注意的是public和default可以用來(lái)修飾class關(guān)鍵字,但protected和private不可以用來(lái)修飾class關(guān)鍵字。通常,類的成員變量使用private來(lái)修飾,成員方法使用public來(lái)修飾。如果需要在類外訪問(wèn)一個(gè)私有化的成員變量,那么可以為其提供公有的訪問(wèn)方式。通常的做法是定義public類型的getter和setter方法,也稱作getter和setter接口。通過(guò)getter方法返回一個(gè)私有化的成員變量,通過(guò)setter方法修改一個(gè)私有化的成員變量。getter及setter方法名的命名規(guī)范為:3.4構(gòu)造方法為了能夠在實(shí)例化對(duì)象的同時(shí)給對(duì)象的屬性賦值,在Java類中定義了一種特殊的成員方法,即構(gòu)造方法。構(gòu)造方法不需要像其他成員方法那樣通過(guò)對(duì)象來(lái)調(diào)用,而是由JVM在實(shí)例化對(duì)象的時(shí)候自動(dòng)調(diào)用。Java構(gòu)造方法必須滿足以下三個(gè)條件:(1)方法沒(méi)有返回類型;(2)方法大括號(hào)內(nèi)可以使用return關(guān)鍵字來(lái)結(jié)束方法的執(zhí)行,但不能使用return語(yǔ)句返回一個(gè)值;(3)方法名與類名相同。Java構(gòu)造方法作為Java函數(shù)的一種,可以重載,同時(shí)也不支持默認(rèn)形參。它為實(shí)例化對(duì)象提供了更豐富的方式。在一個(gè)Java類中至少需要一個(gè)構(gòu)造方法,如果編程人員沒(méi)有定義,那么JVM會(huì)默認(rèn)生成一個(gè)public修飾的、無(wú)參的、沒(méi)有任何執(zhí)行代碼的構(gòu)造方法,例如:如果編程人員定義了類的構(gòu)造方法,不論自定義的構(gòu)造方法是否有形參,JVM都不會(huì)再默認(rèn)生成構(gòu)造方法。通常構(gòu)造方法使用public來(lái)修飾,在一些應(yīng)用場(chǎng)合中也會(huì)使用其他訪問(wèn)修飾符來(lái)修飾自定義的構(gòu)造方法。需要說(shuō)明的是,雖然Java語(yǔ)言從C++語(yǔ)言中汲取了構(gòu)造方法的內(nèi)容,但Java語(yǔ)言摒棄了C++語(yǔ)言中的析構(gòu)函數(shù)。Java類里面不存在析構(gòu)函數(shù),而是引入了垃圾回收機(jī)制。有了這種機(jī)制,程序員不需要過(guò)多關(guān)心垃圾對(duì)象回收的問(wèn)題,JVM會(huì)自動(dòng)啟動(dòng)垃圾回收器將垃圾對(duì)象從內(nèi)存中釋放。3.5this關(guān)鍵字一個(gè)類可以創(chuàng)建多個(gè)對(duì)象。當(dāng)一個(gè)對(duì)象被實(shí)例化時(shí),就會(huì)在內(nèi)存空間為其開(kāi)辟一個(gè)存儲(chǔ)單元,用以存儲(chǔ)該對(duì)象的屬性值。若一個(gè)類有N個(gè)被實(shí)例化的對(duì)象,內(nèi)存空間就會(huì)有N個(gè)存儲(chǔ)單元分別獨(dú)立地存儲(chǔ)每個(gè)對(duì)象的屬性值。類的每個(gè)成員方法在內(nèi)存中只存儲(chǔ)一份,所有對(duì)象都可以去調(diào)用類的成員方法,將自己的屬性值傳遞到函數(shù)中參與運(yùn)算。對(duì)象和成員方法在內(nèi)存中的存儲(chǔ)結(jié)構(gòu)如圖3-5-1所示。那么,成員方法是如何識(shí)別不同的對(duì)象呢?這里就用到了this關(guān)鍵字。在Java中,this關(guān)鍵字主要用于類中,它代表當(dāng)前類對(duì)象的引用。this關(guān)鍵字主要有以下三種用法:(1)使用this關(guān)鍵字訪問(wèn)類的成員變量。(2)使用this關(guān)鍵字訪問(wèn)類的成員方法。(3)使用this關(guān)鍵字訪問(wèn)類的構(gòu)造方法。構(gòu)造方法通常是由JVM自動(dòng)調(diào)用,但程序員可以在構(gòu)造方法內(nèi)使用this關(guān)鍵字調(diào)用其他的構(gòu)造方法。它的調(diào)用格式為:此處調(diào)用的是與this形參列表完全一致的構(gòu)造方法。3.6static關(guān)鍵字在第一個(gè)Java代碼程序中讀者就接觸到了static關(guān)鍵字,它用來(lái)修飾主函數(shù),放在訪問(wèn)修飾符之后,方法返回類型之前,表示“靜態(tài)的”。實(shí)際上,static關(guān)鍵字在Java語(yǔ)言中既可以修飾成員方法,也可以修飾成員變量、代碼塊等。3.6.1靜態(tài)變量在Java語(yǔ)言中,靜態(tài)變量就是使用static修飾的成員變量。在實(shí)際開(kāi)發(fā)中,有時(shí)候需要一個(gè)類的對(duì)象共享一個(gè)成員變量,以節(jié)省內(nèi)存開(kāi)銷。例如,一個(gè)學(xué)校的學(xué)生可以共享同一個(gè)學(xué)校名稱,在大西洋中的魚(yú)共享同一片海域,人類共享同一個(gè)家園等。由于在創(chuàng)建對(duì)象時(shí)每個(gè)對(duì)象都會(huì)有自己獨(dú)立的數(shù)據(jù)存儲(chǔ)單元,而共享的成員變量不需要每個(gè)對(duì)象空間都存儲(chǔ),這時(shí)就可以將這個(gè)共享的成員變量定義為靜態(tài)變量。一個(gè)類的靜態(tài)變量是該類對(duì)象所共享的,因此每個(gè)對(duì)象都可以訪問(wèn)它。同時(shí)靜態(tài)變量在存儲(chǔ)結(jié)構(gòu)上不屬于某一個(gè)對(duì)象,而是屬于這個(gè)類,因此也可以通過(guò)類名直接訪問(wèn)靜態(tài)變量。在實(shí)例化對(duì)象之前就可以使用類名調(diào)用靜態(tài)變量。建議靜態(tài)變量使用類名調(diào)用,這樣可以直觀地辨別出它是靜態(tài)的。靜態(tài)變量使用類名調(diào)用的語(yǔ)法格式為:類或者任一對(duì)象改變了靜態(tài)變量的值,那么該值就會(huì)即時(shí)更新。如果希望靜態(tài)變量能夠在全局范圍內(nèi)被訪問(wèn)到,就將其定義為公有的。3.6.2靜態(tài)代碼塊類的成員變量分為靜態(tài)變量和非靜態(tài)變量。一般而言,非靜態(tài)變量是通過(guò)構(gòu)造方法初始化的,每次實(shí)例化一個(gè)對(duì)象,都會(huì)調(diào)用相應(yīng)形參的構(gòu)造方法。而靜態(tài)變量不需要每次實(shí)例化對(duì)象的時(shí)候都賦值,大多數(shù)時(shí)候靜態(tài)變量只需要初始化一次就可以了。因此,靜態(tài)變量一般不通過(guò)構(gòu)造方法來(lái)賦值,而是通過(guò)Java類中的靜態(tài)代碼塊來(lái)初始化。靜態(tài)代碼塊是在Java類中獨(dú)立存在的一段代碼,用大括號(hào)括起來(lái),前面加上static關(guān)鍵字,其語(yǔ)法格式如下:靜態(tài)代碼塊只會(huì)在第一次使用類或者實(shí)例化第一個(gè)本類對(duì)象的時(shí)候才會(huì)執(zhí)行,而且僅執(zhí)行一次。如果靜態(tài)代碼塊、構(gòu)造方法和實(shí)例代碼塊都需要執(zhí)行,那么執(zhí)行的順序依次為:靜態(tài)代碼塊、實(shí)例代碼塊和構(gòu)造方法。需要注意的是,靜態(tài)代碼塊是不可以對(duì)非靜態(tài)變量賦值的。3.6.3靜態(tài)方法static關(guān)鍵字還可以修飾成員方法,此時(shí)這個(gè)方法就被稱為靜態(tài)方法。同靜態(tài)變量一樣,靜態(tài)方法也可以在沒(méi)有創(chuàng)建對(duì)象的情況下使用類名調(diào)用執(zhí)行,而非靜態(tài)方法只能通過(guò)實(shí)例化的對(duì)象調(diào)用。這就是為什么Java語(yǔ)言的主方法使用static修飾

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論