




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《面向?qū)ο蟪绦蛟O(shè)計(jì)》教案第11講教學(xué)對象計(jì)算機(jī)科學(xué)技術(shù)專業(yè)授課內(nèi)容4.10對象初始化4.11變量作用域4.12局部變量類型推斷4.13垃圾回收課程標(biāo)準(zhǔn)教學(xué)目標(biāo)(一)知識目標(biāo)1.了解對象初始化和變量作用域2.掌握局部變量類型推斷var的使用3.了解垃圾回收的概念(二)能力目標(biāo)1.能夠應(yīng)用類、對象、封裝、繼承、多態(tài)等知識編寫應(yīng)用程序2.能夠掌握面向?qū)ο罄碚撆c方法,進(jìn)行創(chuàng)新性的編程設(shè)計(jì)教學(xué)方法課前預(yù)習(xí)、課堂講授、課堂練習(xí)。學(xué)時及分配(第1學(xué)時50分鐘)課堂講授30分鐘課堂練習(xí)20分鐘4.10對象初始化4.11變量作用域4.12局部變量類型推斷4.13垃圾回收學(xué)時及分配(第2學(xué)時50分鐘)課堂講授20分鐘課堂練習(xí)30分鐘編程訓(xùn)練知識點(diǎn)分析重點(diǎn):對象初始化變量作用域方法的遞歸調(diào)用難點(diǎn):方法的遞歸調(diào)用
教學(xué)過程設(shè)計(jì)內(nèi)容方式問題導(dǎo)入上次課學(xué)習(xí)了實(shí)例變量和靜態(tài)變量,實(shí)例變量和靜態(tài)變量的初始化略有不同。在Java程序中需要創(chuàng)建許多對象。為對象確定初始狀態(tài)稱為對象初始化。下面我們來學(xué)習(xí)對象初始化相關(guān)內(nèi)容。內(nèi)容要點(diǎn)4.10對象初始化在Java程序中需要創(chuàng)建許多對象。為對象確定初始狀態(tài)稱為對象初始化。對象初始化主要是指初始化對象的成員變量。實(shí)例變量和靜態(tài)變量的初始化略有不同。當(dāng)一個對象不再使用,應(yīng)該清除以釋放它所占的空間,通過垃圾回收器清除對象。4.10.1實(shí)例變量的初始化Java語言能夠保證所有的對象都被初始化。實(shí)例變量的初始化有下面幾種方式:(1)聲明時初始化。(2)使用初始化塊。(3)使用構(gòu)造方法初始化。1.成員變量默認(rèn)值在類的定義中如果沒有為變量賦初值,則編譯器為每個成員變量指定一個默認(rèn)值。對引用類型的變量,默認(rèn)值為null。對基本數(shù)據(jù)類型的變量,默認(rèn)值如表4-1所示。【程序4-14】使用成員變量默認(rèn)值初始化對象狀態(tài)。Student.javapackagecom.boda.xy;publicclassStudent{intid;成員變量沒有賦初值,它們將使用默認(rèn)值。Stringname;成員變量沒有賦初值,它們將使用默認(rèn)值。doublemarks;booleanpass;//定義成員方法publicvoiddisplay(){System.out.println("id="+id);System.out.println("name="+name);System.out.println("marks="+marks);System.out.println("pass="+pass);}publicstaticvoidmain(String[]args){Students=newStudent();s.display();}}2.在變量聲明時初始化可以在成員變量聲明的同時為變量初始化,如下所示。3.使用初始化塊初始化在類體中使用一對大括號定義一個初始化塊,在該塊中可以對實(shí)例變量初始化。例如:intid;Stringname;doublemarks;booleanpass;{id=1001;這里是初始化塊,由一對大括號定界。name="李明";這里是初始化塊,由一對大括號定界。marks=90.5;pass=true;}4.使用構(gòu)造方法初始化可以在構(gòu)造方法中對變量初始化,例如,對于Student類可以定義下面的構(gòu)造方法。publicStudent(intid,Stringname,doublemarks,booleanpass){用構(gòu)造方法參數(shù)初始化成員變量。this.id=id;用構(gòu)造方法參數(shù)初始化成員變量。=name;this.marks=marks;this.pass=pass;}5.初始化次序從上面程序輸出結(jié)果可以看到,構(gòu)造方法被最后執(zhí)行,這與初始化塊和構(gòu)造方法在源代碼中的位置無關(guān)。實(shí)際上,程序是按下面順序?yàn)閷?shí)例變量初始化的。(1)首先使用默認(rèn)值或指定的初值初始化。(2)接下來執(zhí)行初始化塊。(3)最后再執(zhí)行構(gòu)造方法。4.10.2靜態(tài)變量的初始化靜態(tài)變量的初始化與實(shí)例變量的初始化類似,靜態(tài)變量如果在聲明時沒有指定初值,編譯器也將使用默認(rèn)值為其賦初值。主要方法有:(1)聲明時初始化。(2)使用靜態(tài)初始化塊。(3)使用構(gòu)造方法初始化。1.靜態(tài)初始化塊對于static變量除了可以使用前兩種方法初始化外,還可以使用靜態(tài)初始化塊。靜態(tài)初始化塊是在初始化塊前面加上static關(guān)鍵字。例如,下面的類定義就使用了靜態(tài)初始化塊。publicclassStaticDemo{staticintx=100;static{靜態(tài)初始化塊。x=48;靜態(tài)初始化塊。}publicStsticDemo{x=88;}//其他代碼}2.初始化順序當(dāng)一個類有多種初始化方法時,執(zhí)行順序是:(1)用默認(rèn)值給static變量賦值,然后執(zhí)行靜態(tài)初始化塊為static變量賦值。(2)用默認(rèn)值給實(shí)例變量賦值,然后執(zhí)行初始化塊為實(shí)例變量賦值。(3)最后使用構(gòu)造方法初始化實(shí)例變量和靜態(tài)變量。4.11變量的作用域在Java中有多個地方可以使用變量,如類的成員變量、方法的局部變量、代碼塊中聲明的變量(如for語句以及異常處理塊等)。變量的作用域(scope)是指一個變量可以在程序的什么范圍內(nèi)被使用。Java程序的作用域是通過塊實(shí)現(xiàn)的,塊(block)是使用一對大括號封裝的語句序列,塊可對語句進(jìn)行分組并定義變量的作用域。一般來說,變量只在其聲明的塊中可見,在塊外不可見。若一個變量屬于某個作用域,它在該作用域可見,即可被訪問,否則不能被訪問。變量的生存期(lifetime)是指變量被分配內(nèi)存的時間期限。當(dāng)聲明一個方法局部變量時,系統(tǒng)將為該變量分配內(nèi)存,只要方法沒有返回,該變量將一直保存在內(nèi)存中。一旦方法返回,該變量將從內(nèi)存棧中清除,它將不能再被訪問。對于對象,當(dāng)使用new創(chuàng)建對象時,系統(tǒng)將在堆中分配內(nèi)存。當(dāng)一個對象不再被引用時,對象和內(nèi)存將被回收。但不是對象離開作用域就立即被回收。實(shí)際上是在之后某個時刻當(dāng)垃圾回收器運(yùn)行時才被回收。4.12局部變量類型推斷在方法中聲明一個引用類型變量并使用構(gòu)造方法創(chuàng)建對象時,需要兩次輸入變量類型,第一次用于聲明變量類型,第二次用于構(gòu)造方法,比如:AccountmyAccount=newAccount();在聲明變量時使用一次類型名Account,在創(chuàng)建實(shí)例時又使用一次類型名,顯然存在代碼冗余問題。從Java10開始,開發(fā)人員可以使用var聲明一個局部變量,然后通過構(gòu)造方法或工廠方法創(chuàng)建對象,在創(chuàng)建對象時讓編譯器自己去推斷類型,從而確定變量的類型:varmyAccount=newAccount();在處理var時,編譯器先是查看表達(dá)式右邊部分,也就是所謂的構(gòu)造器,并將它作為變量的類型。這樣可以少輸入一些字符,更重要的是,它避免了信息冗余,而且對齊了變量名,更容易閱讀。不是在任何時候都可使用var聲明變量,它只能用在局部變量聲明并創(chuàng)建時,更準(zhǔn)確地說,是那些帶有構(gòu)造器的局部變量聲明。下面用法不正確。不可以,現(xiàn)在不能推斷myAccount的類型varmyAccount;不可以,現(xiàn)在不能推斷myAccount的類型myAccount=newAccount();字符串是引用類型,下面用法是正確的:varname="張大海";4.13垃圾回收在Java程序中允許創(chuàng)建盡可能多的對象,而不用擔(dān)心銷毀它們。當(dāng)程序使用完一個對象,該對象不再被引用時,Java運(yùn)行系統(tǒng)就在后臺自動運(yùn)行一個線程,它將銷毀該對象并釋放其所占的內(nèi)存空間,這個過程稱為垃圾回收(GarbageCollection,GC)。后臺運(yùn)行的線程稱為垃圾回收器(garbagecollector)。垃圾回收器自動完成垃圾回收操作,因此,這個功能也稱為自動垃圾回收。所以,在一般情況下,程序員不必關(guān)心對象不被清除而產(chǎn)生內(nèi)存泄露問題。1.對象何時有可能被回收當(dāng)一個對象不再被引用時,該對象才有可能被回收。請看下面代碼。Accountaccount=newAccount(),account2=newAccount();account2=account;上面代碼段創(chuàng)建了兩個Account對象account、account2,然后讓account2指向account,這時account2原來指向的對象沒有任何引用指向它了,也沒有任何辦法得到或操作該對象了,該對象就有可能被回收了。另外,也可明確刪除一個對象的引用,這通過為對象引用賦null值即可,如下所示:account2=null;//原來的account2對象可被回收,注意與上面代碼的區(qū)別一個對象可能有多個引用,只有在所有的引用都被刪除,對象才有可能被回收。2.強(qiáng)制執(zhí)行垃圾回收盡管Java提供了垃圾回收器,但不能保證不被使用的對象及時被回收。如果希望系統(tǒng)運(yùn)行垃圾回收器,可以直接調(diào)用System類的gc()方法,如下所示:System.gc();另一種調(diào)用垃圾回收器的方法是通過Runtime類的gc()實(shí)例方法,如下所示:Runtimert=Runtime.getRuntime();rt.gc();要注意,啟動垃圾回收器并不意味著馬上能回收無用的對象。因?yàn)椋瑘?zhí)行垃圾回收器需要一定的時間,且受各種因素如內(nèi)存堆的大小、處理器的速度等的影響,因此垃圾回收器的真正執(zhí)行是在啟動垃圾回收器后的某個時刻才能執(zhí)行。【知識點(diǎn)總結(jié)】(1)靜態(tài)成員使用static修飾符修飾。類的每個實(shí)例都能訪問這個類的靜態(tài)變量和靜態(tài)方法。然而,為清晰起見,最好使用“類名.變量”和“類名.方法”來訪問靜態(tài)變量和靜態(tài)方法。(2)實(shí)例變量的初始化順序是在聲明時初始化、使用初始化塊初始化、使用構(gòu)造方法初始化。靜態(tài)變量的初始化順序是聲明時初始化、使用靜態(tài)初始化塊初始化、使用構(gòu)造方法初始化。(3)當(dāng)一個對象不再被使用,自動調(diào)用后臺垃圾回收器銷毀對象,也可以調(diào)用System.gc()方法或者Runtime實(shí)例的gc()方法強(qiáng)制執(zhí)行垃圾回收器。但這些方法都不保證系統(tǒng)立即回收無用對象。編程訓(xùn)練教材習(xí)題4.7,4.8采用機(jī)房集中授課,邊講邊練,同時用啟發(fā)式、討論式等教學(xué)方法。布置課外學(xué)習(xí)任務(wù)課后思考題:1.在一個類中可以定義兩個同名但參數(shù)類型不同的方法嗎?在一個類中可以定義兩個名稱和參數(shù)列表相同,
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)排放控制與環(huán)境標(biāo)準(zhǔn)制定
- 工業(yè)旅游發(fā)展路徑研究
- 工業(yè)機(jī)器人散熱與節(jié)能的先進(jìn)技術(shù)
- 工業(yè)污染排放的實(shí)時監(jiān)控技術(shù)應(yīng)用
- 工業(yè)機(jī)器人技術(shù)及產(chǎn)業(yè)應(yīng)用分析
- 工業(yè)污染防治國際合作項(xiàng)目分析
- 工業(yè)自動化系統(tǒng)的編程與調(diào)試技術(shù)
- 工業(yè)節(jié)能與環(huán)保法規(guī)的協(xié)同推進(jìn)
- 工業(yè)自動化與智能化轉(zhuǎn)型戰(zhàn)略
- 工業(yè)自動化與新材料技術(shù)的融合
- 市政工程計(jì)量表格樣表
- 部編版六年級道德與法治上冊期末復(fù)習(xí)課件
- 氫能源行業(yè)的投資機(jī)會分析
- 供電公司負(fù)責(zé)人講安全課
- 【物理】《滑輪》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教版(2024)初中物理八年級下冊
- 火車站高鐵站消防培訓(xùn)
- 專項(xiàng)10:現(xiàn)代文閱讀 媒體文閱讀(練習(xí))-【中職專用】2025年對口升學(xué)語文二輪專項(xiàng)突破(解析版)
- 降低患者跌倒的發(fā)生率
- 2024中華人民共和國學(xué)前教育法詳細(xì)解讀課件
- 湖北省武漢市2024年中考數(shù)學(xué)試卷(含答案)
- 2023-2024學(xué)年山東省濰坊市高二下學(xué)期期中考試歷史試題(解析版)
評論
0/150
提交評論