




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、9、對象的前世今生授課教師:崔曉暉聯(lián)系方式: 授課學(xué)時:402022/8/13Java程序設(shè)計基礎(chǔ)2對象有生死你要對對象的生命周期負(fù)責(zé)你決定著對象創(chuàng)建銷毀對象是隱式的構(gòu)造器與垃圾收集器本章目錄2022/8/13Java程序設(shè)計基礎(chǔ)39.1 對象和變量的生存空間9.2 局部變量和實例變量9.3 創(chuàng)建對象9.4 構(gòu)造函數(shù)的覆蓋9.5 this9.6 對象生命周期9.7 資源回收9.8 總結(jié)棧與堆2022/8/13Java程序設(shè)計基礎(chǔ)4在Java中程序員會在乎內(nèi)存中的兩種區(qū)域:堆:對象生存空間堆heap棧:方法調(diào)用及變量生存空間stack對象生存在可回收的堆上。棧與堆2022/8/13Java程序設(shè)
2、計基礎(chǔ)5在Java中變量的存儲位置變量中實例變量在堆上,而局部變量在棧上。棧與堆2022/8/13Java程序設(shè)計基礎(chǔ)6在Java中棧上方法的調(diào)用及變量的關(guān)系調(diào)用方法時,該方法會放在調(diào)用棧的棧頂。實際上,被放在棧上的不僅僅包括方法,還包括了方法的狀態(tài),執(zhí)行到哪一行以及所有的局部變量。先來先服務(wù)棧與堆2022/8/13Java程序設(shè)計基礎(chǔ)7有關(guān)對象的局部變量非primitive的變量只保存對象的引用。因此對象本身在堆上存儲,而局部變量本身是對該對象的引用,存儲在棧上。棧與堆2022/8/13Java程序設(shè)計基礎(chǔ)8小結(jié)程序員關(guān)心棧和堆兩種內(nèi)存空間。實例變量是聲明在類中方法之外的地方。局部變量聲明在
3、方法或方法的參數(shù)上。所有局部變量都存在于棧上相對應(yīng)的對戰(zhàn)塊中。對象引用變量與primitive主數(shù)據(jù)類型變量都是放在棧上。不管是實例變量或局部變量,對象本身都會在堆上。棧與堆2022/8/13Java程序設(shè)計基礎(chǔ)9有關(guān)實例變量的生存位置實例變量存在于堆上,在對象內(nèi)保存。Java會根據(jù)實例變量的大小,在堆上申請對應(yīng)的空間,如果是primitive主數(shù)據(jù)類型,則根據(jù)主數(shù)據(jù)類型大小分配空間。如果是對象,則引用類型的實例變量存儲的不是對象本身,保存的是引用量。對于一些引用型實例變量,如果未進行初始化賦值,則保存為沒有賦值的狀態(tài),直到變量被賦予一個新的對象后才會在堆上占用空間。創(chuàng)建對象2022/8/13
4、Java程序設(shè)計基礎(chǔ)10創(chuàng)建對象的過程聲明創(chuàng)建賦值創(chuàng)建對象2022/8/13Java程序設(shè)計基礎(chǔ)11創(chuàng)建過程調(diào)用的方法看起來是調(diào)用了Duck()這個方法,實際上并不是,我們在創(chuàng)建過程中,調(diào)用的是Duck的構(gòu)造函數(shù)。構(gòu)造函數(shù)看上去很像方法,但不是方法,它帶有new的時候會執(zhí)行的程序代碼。唯一能夠調(diào)用構(gòu)造函數(shù)的方法就是新建一個類。創(chuàng)建對象2022/8/13Java程序設(shè)計基礎(chǔ)12默認(rèn)構(gòu)造函數(shù)你如果沒有寫構(gòu)造函數(shù),編譯器會幫助你寫一個默認(rèn)的形式與之前方法的不同:方法有返回值,構(gòu)造函數(shù)沒有返回值構(gòu)造函數(shù)必須與類名相同創(chuàng)建對象2022/8/13Java程序設(shè)計基礎(chǔ)13構(gòu)造函數(shù)的作用構(gòu)造函數(shù)的作用是在對象
5、能夠被賦值給引用之前就執(zhí)行你可以再對象被使用之前接入。在任何人獲取遙控器前,對象有機會對構(gòu)造構(gòu)成給予協(xié)助。創(chuàng)建對象2022/8/13Java程序設(shè)計基礎(chǔ)14新建Duck狀態(tài)的初始化大部分人都使用構(gòu)造函數(shù)來初始化對象的狀態(tài),即設(shè)置和給對象的實例變量賦值。如果想要通過給定的初值設(shè)定狀態(tài)的對象,則:創(chuàng)建對象2022/8/13Java程序設(shè)計基礎(chǔ)15新建Duck狀態(tài)的初始化在構(gòu)造函數(shù)中利用參數(shù)初始化對象的狀態(tài),防止用戶直接使用默認(rèn)值狀態(tài)下的對象狀態(tài)。創(chuàng)建對象2022/8/13Java程序設(shè)計基礎(chǔ)16新建Duck狀態(tài)的初始化最好保留一個無參數(shù)的構(gòu)造函數(shù)在程序員不知道Duck的大小時,如果預(yù)設(shè)的大小讓程序
6、員在不知道適當(dāng)大小時候也可以創(chuàng)建出Duck。單一構(gòu)造函數(shù)無法達到上述目的,必須給定一個沒有參數(shù)的構(gòu)造函數(shù)如果你已經(jīng)寫了一個有參數(shù)的構(gòu)造函數(shù),并且你需要一個沒有參數(shù)的構(gòu)造函數(shù),則你必須自己動手寫。如果類有一個以上的構(gòu)造函數(shù),則參數(shù)一定要不一樣創(chuàng)建對象2022/8/13Java程序設(shè)計基礎(chǔ)17重載構(gòu)造函數(shù)你有一個以上的構(gòu)造函數(shù)且參數(shù)不一樣假設(shè)兩個構(gòu)造函數(shù)參數(shù)都只有1個int,則肯定無法通過編譯程序。創(chuàng)建對象2022/8/13Java程序設(shè)計基礎(chǔ)18小結(jié)實例變量保存在所屬的對象中,位于堆上。如果實例變量是對某個對象的引用,則引用于對象都在堆上。構(gòu)造函數(shù)是個會在新建對象的時候執(zhí)行程序代碼構(gòu)造函數(shù)必須與
7、類同名且沒有返回類型你可以用構(gòu)造函數(shù)來初始被創(chuàng)建對象的狀態(tài)如果你沒有寫構(gòu)造函數(shù),編譯器會幫你安排一個默認(rèn)構(gòu)造函數(shù)是沒有參數(shù)的如果你寫了構(gòu)造函數(shù),則編譯器就不會調(diào)用。最好能有無參數(shù)的構(gòu)造函數(shù)讓人可以選擇使用默認(rèn)值重載的構(gòu)造函數(shù)意思是有超過一個以上的構(gòu)造函數(shù)。重載的構(gòu)造函數(shù)必須有不同的參數(shù)。兩個構(gòu)造函數(shù)的參數(shù)必須不同實例變量有默認(rèn)值,原始默認(rèn)為0,0.0,false,引用默認(rèn)為null父類的空間2022/8/13Java程序設(shè)計基礎(chǔ)19父類以及集成與構(gòu)造函數(shù)的關(guān)系父類的空間2022/8/13Java程序設(shè)計基礎(chǔ)20父類的構(gòu)造函數(shù)在創(chuàng)建新對象時,所有繼承下來的構(gòu)造函數(shù)都會執(zhí)行。執(zhí)行new指令會啟動構(gòu)
8、造函數(shù)的連鎖反應(yīng),雖然你不能對抽象類執(zhí)行new操作,但抽象的類還是父類,因此它的構(gòu)造函數(shù)會在子類創(chuàng)建出實例時執(zhí)行。在構(gòu)造函數(shù)中通過super調(diào)用父類構(gòu)造函數(shù)部分。父類的空間2022/8/13Java程序設(shè)計基礎(chǔ)21構(gòu)造函數(shù)的執(zhí)行過程父類的空間2022/8/13Java程序設(shè)計基礎(chǔ)22調(diào)用父類的構(gòu)造函數(shù)如果你沒有編寫構(gòu)造函數(shù),則如果你有構(gòu)造函數(shù)但沒有調(diào)用super()父類的空間2022/8/13Java程序設(shè)計基礎(chǔ)23調(diào)用父類的構(gòu)造函數(shù)對super的調(diào)用必須是構(gòu)造函數(shù)的第一個語句父類的空間2022/8/13Java程序設(shè)計基礎(chǔ)24有參數(shù)的父類構(gòu)造函數(shù)父類的空間2022/8/13Java程序設(shè)計基礎(chǔ)25調(diào)用重載版本的的構(gòu)造函數(shù)如果你希望在一個構(gòu)造函數(shù)中調(diào)用另一個構(gòu)造函數(shù),然后在執(zhí)行內(nèi)容使用this()來從某個構(gòu)造函數(shù)調(diào)用同一個類的另一個構(gòu)造函數(shù)this()只能用在構(gòu)造函數(shù)中,且必須是第一行語句。super()和this()不能同時調(diào)用。父類的空間2022/8/13Java程序設(shè)計基礎(chǔ)26對象的存活對象的生命周期要看引用變量的生命周期,那么變量會活多久?局部
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZLX 088-2024 綠色食品 永嘉早香柚生產(chǎn)技術(shù)規(guī)程
- 二零二五年度新材料研發(fā)股份分紅及市場拓展合同模板
- T-ZGZX 0003-2024 成年智力殘疾人托養(yǎng)服務(wù)指南
- 二零二五年度夫妻共同財產(chǎn)保全與婚后生活規(guī)劃協(xié)議
- 二零二五年度企業(yè)合同管理制度與品牌建設(shè)合同
- 二零二五年度智慧城市建設(shè)抵押貸款協(xié)議
- 二零二五年度城市建筑工地渣土車租賃管理協(xié)議
- 二零二五年度農(nóng)村土地承包經(jīng)營權(quán)流轉(zhuǎn)與農(nóng)業(yè)病蟲害防治服務(wù)合同
- 二零二五年度高科技企業(yè)股權(quán)合作協(xié)議書
- 2025年度生物制藥產(chǎn)業(yè)合作投資合同
- 墓碑供貨方案及服務(wù)保障措施
- 成都市建筑消防設(shè)施及電氣防火檢測規(guī)范DB510100T
- delta-臺達dvp eh系列plc使用說明書ehs
- 創(chuàng)意三八女神節(jié)活動策劃PPT模板課件
- Q∕GDW 12152-2021 輸變電工程建設(shè)施工安全風(fēng)險管理規(guī)程
- 云南省地質(zhì)災(zāi)害群測群防手冊
- 電力施工安全技術(shù)交底記錄表
- 集團權(quán)屬公司管理制度
- 普通中專畢業(yè)生登記表格模板(共4頁)
- 五金沖壓件作業(yè)指導(dǎo)書
- 汽車吊車吊裝施工方案
評論
0/150
提交評論