版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
3.1面向過程與面向?qū)ο蟮母拍?.2類與對象的定義和使用3.3訪問修飾符3.4構(gòu)造方法3.5this關(guān)鍵字3.6static關(guān)鍵字人們在探索客觀世界的時候,為了更加方便地描述客觀事物,會對事物進行分門別類。人們把具有相同屬性、特性或者用途的事物歸為一類,在這個類中的每個個體都具有該類的所有特征。這種思維其實就是面向?qū)ο蟮乃季S,它能夠清晰明了地描述事物的特點和關(guān)系,同時便于研究和使用。其實,面向?qū)ο蟮木幊趟枷刖驮从谌藗儗陀^世界的認知思維。Java語言是一門純面向?qū)ο蟮母呒壘幊陶Z言,它具有抽象、封裝、繼承和多態(tài)四大特性。從“面向?qū)ο蟆钡拿种芯涂梢钥吹綄ο笤贘ava語言中的重要性。實際上,Java語言最核心的概念就是類和對象,它們是實現(xiàn)上述四大特性的基石。本章圍繞類和對象這兩個概念重點介紹類的抽象和封裝。3.1面向過程與面向?qū)ο蟮母拍?.1.1面向過程與面向?qū)ο缶幊趟枷敫呒壘幊陶Z言分為面向過程和面向?qū)ο髢深愓Z言,面向過程的編程思想是按照事物發(fā)展的先后順序把過程分成幾個步驟,每個步驟執(zhí)行一段相對獨立的代碼處理一部分數(shù)據(jù),相當于把問題的處理過程拆分成一個個的方法和數(shù)據(jù),然后按照一定的順序執(zhí)行。通俗而言,面向過程編程就是通過創(chuàng)建變量和方法,并使用多個方法協(xié)同處理數(shù)據(jù)的過程。而面向?qū)ο蟮木幊趟枷胧前芽陀^世界中具有相同屬性的事物抽象成類的概念,在類中描繪該類事物共有的屬性(變量)和行為(方法)。該類事物中的每個個體就是一個對象,每個對象可以有自己的屬性值,同時可以調(diào)用類中的方法。然后在待處理的問題中創(chuàng)建一個個的對象,通過多個對象的相互配合來實現(xiàn)應(yīng)用程序的功能。面向過程編程和面向?qū)ο缶幊潭际前凑找欢ǖ倪壿嬳樞蛘{(diào)用預(yù)設(shè)的方法解決問題。但不同的是,面向過程編程的基本單元是方法,面向?qū)ο缶幊痰幕締卧穷?,通過創(chuàng)建類的對象來調(diào)用類中定義的方法。當要處理的事務(wù)比較簡單時,使用面向過程編程相對簡潔。但如果需要處理的事務(wù)繁雜,那么每個步驟都要單獨定義一個方法,在大多時候方法還不能通用,此時使用面向?qū)ο蟮木幊谭椒ň蜁@得簡單明了。此外,在代碼后續(xù)的擴展和維護上,面向?qū)ο蟮木幊谭椒ǜ尤菀住C嫦蜻^程和面向?qū)ο缶幊谭绞降膶Ρ热绫?-1-1所示。3.1.2類與對象的概念類和對象是面向?qū)ο缶幊痰暮诵母拍?。其中類是對客觀世界中某一類事物的抽象,在描述這類事物的時候使用到了屬性和行為。對象是類的實例化。類是一個抽象的概念,是對象的模板,而對象是一個具體的實例,是類的實體。在代碼實現(xiàn)時,屬性使用變量來描述,行為使用函數(shù)來描述。面向?qū)ο缶幊痰倪^程就是根據(jù)需求創(chuàng)建許多不同的類,然后創(chuàng)建每個類的對象,每個對象都有各自的數(shù)據(jù)值,通過調(diào)用類中的方法來實現(xiàn)一定的功能邏輯。在Java編程中“一切事物皆對象”,客觀世界中的所有事物都可以通過類來抽象,通過對象來描述。例如,可以創(chuàng)建天氣類來描述天氣的屬性和行為,可以創(chuàng)建一個算法類來描述算法的屬性和行為。在定義類的時候,并不是這類事物的屬性和行為都需要寫進去,也并不是必須同時具有屬性和行為,而是根據(jù)編程的需求填寫。當類定義好之后,就可以創(chuàng)建該類的對象了。3.2類與對象的定義和使用3.2.2對象的創(chuàng)建和使用類只是聲明了一種自定義的引用數(shù)據(jù)類型,在編程時只有類是不夠的,還需要創(chuàng)建類的對象。Java類的對象和數(shù)組相似,都是引用數(shù)據(jù)類型,因此它也符合數(shù)組定義的步驟,即先聲明后實例化。在編寫代碼時可以使用兩行代碼,也可以合并成一行代碼。Java對象的創(chuàng)建格式有如下三種:這三種形式基本沒有區(qū)別,其中第三種形式更加簡潔。只是在某些場合使用第二種形式編程會更加方便些。當聲明一個Student類的對象stu時,JVM在內(nèi)存空間為其開辟一個存儲單元,該單元的默認值為null。當實例化一個對象時,在內(nèi)存里面就會開辟另一個空間,里面存儲該對象的屬性值,同時將這個空間的存儲地址賦值到stu變量的存儲單元,如圖3-2-1所示。由此可知,對象本身存儲的是一個內(nèi)存單元的地址,這個地址對應(yīng)的內(nèi)存空間才是真正存儲對象屬性值的地方。在Java語言中引用數(shù)據(jù)類型的變量在內(nèi)存中存儲時基本都是這種模式,如數(shù)組和枚舉等。對象實例化后就可以使用本類中的成員了,它的語法規(guī)則為:此外,也可以創(chuàng)建類類型的數(shù)組,它的語法規(guī)則與基本數(shù)據(jù)類型的數(shù)組一致。3.3訪問修飾符為了實現(xiàn)對數(shù)據(jù)的封裝和保護,在Java語言中定義了類成員的訪問修飾符,也叫訪問控制符,用來控制成員能夠被訪問的范圍。訪問修飾符有以下四種:(1)private(私有的):只能在當前類中可訪問。(2)default(缺省的):不用任何訪問修飾符,也稱作默認訪問修飾符。在當前包內(nèi)可訪問。(3)protected(保護的):在當前類、當前包以及不同包里面的子類中可訪問。(4)public(公有的):所有類都能訪問。表3-3-1總結(jié)了這四種訪問修飾符的權(quán)限控制范圍。這里需要注意的是public和default可以用來修飾class關(guān)鍵字,但protected和private不可以用來修飾class關(guān)鍵字。通常,類的成員變量使用private來修飾,成員方法使用public來修飾。如果需要在類外訪問一個私有化的成員變量,那么可以為其提供公有的訪問方式。通常的做法是定義public類型的getter和setter方法,也稱作getter和setter接口。通過getter方法返回一個私有化的成員變量,通過setter方法修改一個私有化的成員變量。getter及setter方法名的命名規(guī)范為:3.4構(gòu)造方法為了能夠在實例化對象的同時給對象的屬性賦值,在Java類中定義了一種特殊的成員方法,即構(gòu)造方法。構(gòu)造方法不需要像其他成員方法那樣通過對象來調(diào)用,而是由JVM在實例化對象的時候自動調(diào)用。Java構(gòu)造方法必須滿足以下三個條件:(1)方法沒有返回類型;(2)方法大括號內(nèi)可以使用return關(guān)鍵字來結(jié)束方法的執(zhí)行,但不能使用return語句返回一個值;(3)方法名與類名相同。Java構(gòu)造方法作為Java函數(shù)的一種,可以重載,同時也不支持默認形參。它為實例化對象提供了更豐富的方式。在一個Java類中至少需要一個構(gòu)造方法,如果編程人員沒有定義,那么JVM會默認生成一個public修飾的、無參的、沒有任何執(zhí)行代碼的構(gòu)造方法,例如:如果編程人員定義了類的構(gòu)造方法,不論自定義的構(gòu)造方法是否有形參,JVM都不會再默認生成構(gòu)造方法。通常構(gòu)造方法使用public來修飾,在一些應(yīng)用場合中也會使用其他訪問修飾符來修飾自定義的構(gòu)造方法。需要說明的是,雖然Java語言從C++語言中汲取了構(gòu)造方法的內(nèi)容,但Java語言摒棄了C++語言中的析構(gòu)函數(shù)。Java類里面不存在析構(gòu)函數(shù),而是引入了垃圾回收機制。有了這種機制,程序員不需要過多關(guān)心垃圾對象回收的問題,JVM會自動啟動垃圾回收器將垃圾對象從內(nèi)存中釋放。3.5this關(guān)鍵字一個類可以創(chuàng)建多個對象。當一個對象被實例化時,就會在內(nèi)存空間為其開辟一個存儲單元,用以存儲該對象的屬性值。若一個類有N個被實例化的對象,內(nèi)存空間就會有N個存儲單元分別獨立地存儲每個對象的屬性值。類的每個成員方法在內(nèi)存中只存儲一份,所有對象都可以去調(diào)用類的成員方法,將自己的屬性值傳遞到函數(shù)中參與運算。對象和成員方法在內(nèi)存中的存儲結(jié)構(gòu)如圖3-5-1所示。那么,成員方法是如何識別不同的對象呢?這里就用到了this關(guān)鍵字。在Java中,this關(guān)鍵字主要用于類中,它代表當前類對象的引用。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)鍵字在第一個Java代碼程序中讀者就接觸到了static關(guān)鍵字,它用來修飾主函數(shù),放在訪問修飾符之后,方法返回類型之前,表示“靜態(tài)的”。實際上,static關(guān)鍵字在Java語言中既可以修飾成員方法,也可以修飾成員變量、代碼塊等。3.6.1靜態(tài)變量在Java語言中,靜態(tài)變量就是使用static修飾的成員變量。在實際開發(fā)中,有時候需要一個類的對象共享一個成員變量,以節(jié)省內(nèi)存開銷。例如,一個學(xué)校的學(xué)生可以共享同一個學(xué)校名稱,在大西洋中的魚共享同一片海域,人類共享同一個家園等。由于在創(chuàng)建對象時每個對象都會有自己獨立的數(shù)據(jù)存儲單元,而共享的成員變量不需要每個對象空間都存儲,這時就可以將這個共享的成員變量定義為靜態(tài)變量。一個類的靜態(tài)變量是該類對象所共享的,因此每個對象都可以訪問它。同時靜態(tài)變量在存儲結(jié)構(gòu)上不屬于某一個對象,而是屬于這個類,因此也可以通過類名直接訪問靜態(tài)變量。在實例化對象之前就可以使用類名調(diào)用靜態(tài)變量。建議靜態(tài)變量使用類名調(diào)用,這樣可以直觀地辨別出它是靜態(tài)的。靜態(tài)變量使用類名調(diào)用的語法格式為:類或者任一對象改變了靜態(tài)變量的值,那么該值就會即時更新。如果希望靜態(tài)變量能夠在全局范圍內(nèi)被訪問到,就將其定義為公有的。3.6.2靜態(tài)代碼塊類的成員變量分為靜態(tài)變量和非靜態(tài)變量。一般而言,非靜態(tài)變量是通過構(gòu)造方法初始化的,每次實例化一個對象,都會調(diào)用相應(yīng)形參的構(gòu)造方法。而靜態(tài)變量不需要每次實例化對象的時候都賦值,大多數(shù)時候靜態(tài)變量只需要初始化一次就可以了。因此,靜態(tài)變量一般不通過構(gòu)造方法來賦值,而是通過Java類中的靜態(tài)代碼塊來初始化。靜態(tài)代碼塊是在Java類中獨立存在的一段代碼,用大括號括起來,前面加上static關(guān)鍵字,其語法格式如下:靜態(tài)代碼塊只會在第一次使用類或者實例化第一個本類對象的時候才會執(zhí)行,而且僅執(zhí)行一次。如果靜態(tài)代碼塊、構(gòu)造方法和實例代碼塊都需要執(zhí)行,那么執(zhí)行的順序依次為:靜態(tài)代碼塊、實例代碼塊和構(gòu)造方法。需要注意的是,靜態(tài)代碼塊是不可以對非靜態(tài)變量賦值的。3.6.3靜態(tài)方法static關(guān)鍵字還可以修飾成員方法,此時這個方法就被稱為靜態(tài)方法。同靜態(tài)變量一樣,靜態(tài)方法也可以在沒有創(chuàng)建對象的情況下使用類名調(diào)用執(zhí)行,而非靜態(tài)方法只能通過實例化的對象調(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色建筑個人勞務(wù)分包合同規(guī)范文本4篇
- 2025年度個人二手卡車買賣合同規(guī)范4篇
- 2025年度個人貸款合同范本集錦與利率調(diào)整機制3篇
- 2025年個人股權(quán)清算分配協(xié)議范本4篇
- 2024年中職學(xué)生教案模板(共8篇)
- 二零二五版美發(fā)企業(yè)股東股權(quán)變更與投資協(xié)議3篇
- 軋輥示熱處理課程設(shè)計
- 二零二五版美容院員工加班費計算合同樣本4篇
- 部編版初中語文七年級下冊第三單元第12課《賣油翁》教學(xué)設(shè)計及試講稿
- 隧道課程設(shè)計應(yīng)該寫幾個
- 2024高考復(fù)習(xí)必背英語詞匯3500單詞
- 消防控制室值班服務(wù)人員培訓(xùn)方案
- 《貴州旅游介紹》課件2
- 2024年中職單招(護理)專業(yè)綜合知識考試題庫(含答案)
- 無人機應(yīng)用平臺實施方案
- 挪用公款還款協(xié)議書范本
- 事業(yè)單位工作人員年度考核登記表(醫(yī)生個人總結(jié))
- 盾構(gòu)隧道施工數(shù)字化與智能化系統(tǒng)集成
- 【企業(yè)盈利能力探析文獻綜述2400字】
- 2019年醫(yī)養(yǎng)結(jié)合項目商業(yè)計劃書
- 2023年店鋪工程主管年終業(yè)務(wù)工作總結(jié)
評論
0/150
提交評論