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

下載本文檔

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

文檔簡介

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

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論