版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《面向?qū)ο蟪绦蛟O(shè)計(jì)》教案第11講教學(xué)對(duì)象計(jì)算機(jī)科學(xué)技術(shù)專(zhuān)業(yè)授課內(nèi)容4.10對(duì)象初始化4.11變量作用域4.12局部變量類(lèi)型推斷4.13垃圾回收課程標(biāo)準(zhǔn)教學(xué)目標(biāo)(一)知識(shí)目標(biāo)1.了解對(duì)象初始化和變量作用域2.掌握局部變量類(lèi)型推斷var的使用3.了解垃圾回收的概念(二)能力目標(biāo)1.能夠應(yīng)用類(lèi)、對(duì)象、封裝、繼承、多態(tài)等知識(shí)編寫(xiě)應(yīng)用程序2.能夠掌握面向?qū)ο罄碚撆c方法,進(jìn)行創(chuàng)新性的編程設(shè)計(jì)教學(xué)方法課前預(yù)習(xí)、課堂講授、課堂練習(xí)。學(xué)時(shí)及分配(第1學(xué)時(shí)50分鐘)課堂講授30分鐘課堂練習(xí)20分鐘4.10對(duì)象初始化4.11變量作用域4.12局部變量類(lèi)型推斷4.13垃圾回收學(xué)時(shí)及分配(第2學(xué)時(shí)50分鐘)課堂講授20分鐘課堂練習(xí)30分鐘編程訓(xùn)練知識(shí)點(diǎn)分析重點(diǎn):對(duì)象初始化變量作用域方法的遞歸調(diào)用難點(diǎn):方法的遞歸調(diào)用
教學(xué)過(guò)程設(shè)計(jì)內(nèi)容方式問(wèn)題導(dǎo)入上次課學(xué)習(xí)了實(shí)例變量和靜態(tài)變量,實(shí)例變量和靜態(tài)變量的初始化略有不同。在Java程序中需要?jiǎng)?chuàng)建許多對(duì)象。為對(duì)象確定初始狀態(tài)稱(chēng)為對(duì)象初始化。下面我們來(lái)學(xué)習(xí)對(duì)象初始化相關(guān)內(nèi)容。內(nèi)容要點(diǎn)4.10對(duì)象初始化在Java程序中需要?jiǎng)?chuàng)建許多對(duì)象。為對(duì)象確定初始狀態(tài)稱(chēng)為對(duì)象初始化。對(duì)象初始化主要是指初始化對(duì)象的成員變量。實(shí)例變量和靜態(tài)變量的初始化略有不同。當(dāng)一個(gè)對(duì)象不再使用,應(yīng)該清除以釋放它所占的空間,通過(guò)垃圾回收器清除對(duì)象。4.10.1實(shí)例變量的初始化Java語(yǔ)言能夠保證所有的對(duì)象都被初始化。實(shí)例變量的初始化有下面幾種方式:(1)聲明時(shí)初始化。(2)使用初始化塊。(3)使用構(gòu)造方法初始化。1.成員變量默認(rèn)值在類(lèi)的定義中如果沒(méi)有為變量賦初值,則編譯器為每個(gè)成員變量指定一個(gè)默認(rèn)值。對(duì)引用類(lèi)型的變量,默認(rèn)值為null。對(duì)基本數(shù)據(jù)類(lèi)型的變量,默認(rèn)值如表4-1所示?!境绦?-14】使用成員變量默認(rèn)值初始化對(duì)象狀態(tài)。Student.javapackagecom.boda.xy;publicclassStudent{intid;成員變量沒(méi)有賦初值,它們將使用默認(rèn)值。Stringname;成員變量沒(méi)有賦初值,它們將使用默認(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.在變量聲明時(shí)初始化可以在成員變量聲明的同時(shí)為變量初始化,如下所示。3.使用初始化塊初始化在類(lèi)體中使用一對(duì)大括號(hào)定義一個(gè)初始化塊,在該塊中可以對(duì)實(shí)例變量初始化。例如:intid;Stringname;doublemarks;booleanpass;{id=1001;這里是初始化塊,由一對(duì)大括號(hào)定界。name="李明";這里是初始化塊,由一對(duì)大括號(hào)定界。marks=90.5;pass=true;}4.使用構(gòu)造方法初始化可以在構(gòu)造方法中對(duì)變量初始化,例如,對(duì)于Student類(lèi)可以定義下面的構(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)造方法在源代碼中的位置無(wú)關(guān)。實(shí)際上,程序是按下面順序?yàn)閷?shí)例變量初始化的。(1)首先使用默認(rèn)值或指定的初值初始化。(2)接下來(lái)執(zhí)行初始化塊。(3)最后再執(zhí)行構(gòu)造方法。4.10.2靜態(tài)變量的初始化靜態(tài)變量的初始化與實(shí)例變量的初始化類(lèi)似,靜態(tài)變量如果在聲明時(shí)沒(méi)有指定初值,編譯器也將使用默認(rèn)值為其賦初值。主要方法有:(1)聲明時(shí)初始化。(2)使用靜態(tài)初始化塊。(3)使用構(gòu)造方法初始化。1.靜態(tài)初始化塊對(duì)于static變量除了可以使用前兩種方法初始化外,還可以使用靜態(tài)初始化塊。靜態(tài)初始化塊是在初始化塊前面加上static關(guān)鍵字。例如,下面的類(lèi)定義就使用了靜態(tài)初始化塊。publicclassStaticDemo{staticintx=100;static{靜態(tài)初始化塊。x=48;靜態(tài)初始化塊。}publicStsticDemo{x=88;}//其他代碼}2.初始化順序當(dāng)一個(gè)類(lèi)有多種初始化方法時(shí),執(zhí)行順序是:(1)用默認(rèn)值給static變量賦值,然后執(zhí)行靜態(tài)初始化塊為static變量賦值。(2)用默認(rèn)值給實(shí)例變量賦值,然后執(zhí)行初始化塊為實(shí)例變量賦值。(3)最后使用構(gòu)造方法初始化實(shí)例變量和靜態(tài)變量。4.11變量的作用域在Java中有多個(gè)地方可以使用變量,如類(lèi)的成員變量、方法的局部變量、代碼塊中聲明的變量(如for語(yǔ)句以及異常處理塊等)。變量的作用域(scope)是指一個(gè)變量可以在程序的什么范圍內(nèi)被使用。Java程序的作用域是通過(guò)塊實(shí)現(xiàn)的,塊(block)是使用一對(duì)大括號(hào)封裝的語(yǔ)句序列,塊可對(duì)語(yǔ)句進(jìn)行分組并定義變量的作用域。一般來(lái)說(shuō),變量只在其聲明的塊中可見(jiàn),在塊外不可見(jiàn)。若一個(gè)變量屬于某個(gè)作用域,它在該作用域可見(jiàn),即可被訪問(wèn),否則不能被訪問(wèn)。變量的生存期(lifetime)是指變量被分配內(nèi)存的時(shí)間期限。當(dāng)聲明一個(gè)方法局部變量時(shí),系統(tǒng)將為該變量分配內(nèi)存,只要方法沒(méi)有返回,該變量將一直保存在內(nèi)存中。一旦方法返回,該變量將從內(nèi)存棧中清除,它將不能再被訪問(wèn)。對(duì)于對(duì)象,當(dāng)使用new創(chuàng)建對(duì)象時(shí),系統(tǒng)將在堆中分配內(nèi)存。當(dāng)一個(gè)對(duì)象不再被引用時(shí),對(duì)象和內(nèi)存將被回收。但不是對(duì)象離開(kāi)作用域就立即被回收。實(shí)際上是在之后某個(gè)時(shí)刻當(dāng)垃圾回收器運(yùn)行時(shí)才被回收。4.12局部變量類(lèi)型推斷在方法中聲明一個(gè)引用類(lèi)型變量并使用構(gòu)造方法創(chuàng)建對(duì)象時(shí),需要兩次輸入變量類(lèi)型,第一次用于聲明變量類(lèi)型,第二次用于構(gòu)造方法,比如:AccountmyAccount=newAccount();在聲明變量時(shí)使用一次類(lèi)型名Account,在創(chuàng)建實(shí)例時(shí)又使用一次類(lèi)型名,顯然存在代碼冗余問(wèn)題。從Java10開(kāi)始,開(kāi)發(fā)人員可以使用var聲明一個(gè)局部變量,然后通過(guò)構(gòu)造方法或工廠方法創(chuàng)建對(duì)象,在創(chuàng)建對(duì)象時(shí)讓編譯器自己去推斷類(lèi)型,從而確定變量的類(lèi)型:varmyAccount=newAccount();在處理var時(shí),編譯器先是查看表達(dá)式右邊部分,也就是所謂的構(gòu)造器,并將它作為變量的類(lèi)型。這樣可以少輸入一些字符,更重要的是,它避免了信息冗余,而且對(duì)齊了變量名,更容易閱讀。不是在任何時(shí)候都可使用var聲明變量,它只能用在局部變量聲明并創(chuàng)建時(shí),更準(zhǔn)確地說(shuō),是那些帶有構(gòu)造器的局部變量聲明。下面用法不正確。不可以,現(xiàn)在不能推斷myAccount的類(lèi)型varmyAccount;不可以,現(xiàn)在不能推斷myAccount的類(lèi)型myAccount=newAccount();字符串是引用類(lèi)型,下面用法是正確的:varname="張大海";4.13垃圾回收在Java程序中允許創(chuàng)建盡可能多的對(duì)象,而不用擔(dān)心銷(xiāo)毀它們。當(dāng)程序使用完一個(gè)對(duì)象,該對(duì)象不再被引用時(shí),Java運(yùn)行系統(tǒng)就在后臺(tái)自動(dòng)運(yùn)行一個(gè)線(xiàn)程,它將銷(xiāo)毀該對(duì)象并釋放其所占的內(nèi)存空間,這個(gè)過(guò)程稱(chēng)為垃圾回收(GarbageCollection,GC)。后臺(tái)運(yùn)行的線(xiàn)程稱(chēng)為垃圾回收器(garbagecollector)。垃圾回收器自動(dòng)完成垃圾回收操作,因此,這個(gè)功能也稱(chēng)為自動(dòng)垃圾回收。所以,在一般情況下,程序員不必關(guān)心對(duì)象不被清除而產(chǎn)生內(nèi)存泄露問(wèn)題。1.對(duì)象何時(shí)有可能被回收當(dāng)一個(gè)對(duì)象不再被引用時(shí),該對(duì)象才有可能被回收。請(qǐng)看下面代碼。Accountaccount=newAccount(),account2=newAccount();account2=account;上面代碼段創(chuàng)建了兩個(gè)Account對(duì)象account、account2,然后讓account2指向account,這時(shí)account2原來(lái)指向的對(duì)象沒(méi)有任何引用指向它了,也沒(méi)有任何辦法得到或操作該對(duì)象了,該對(duì)象就有可能被回收了。另外,也可明確刪除一個(gè)對(duì)象的引用,這通過(guò)為對(duì)象引用賦null值即可,如下所示:account2=null;//原來(lái)的account2對(duì)象可被回收,注意與上面代碼的區(qū)別一個(gè)對(duì)象可能有多個(gè)引用,只有在所有的引用都被刪除,對(duì)象才有可能被回收。2.強(qiáng)制執(zhí)行垃圾回收盡管Java提供了垃圾回收器,但不能保證不被使用的對(duì)象及時(shí)被回收。如果希望系統(tǒng)運(yùn)行垃圾回收器,可以直接調(diào)用System類(lèi)的gc()方法,如下所示:System.gc();另一種調(diào)用垃圾回收器的方法是通過(guò)Runtime類(lèi)的gc()實(shí)例方法,如下所示:Runtimert=Runtime.getRuntime();rt.gc();要注意,啟動(dòng)垃圾回收器并不意味著馬上能回收無(wú)用的對(duì)象。因?yàn)?,?zhí)行垃圾回收器需要一定的時(shí)間,且受各種因素如內(nèi)存堆的大小、處理器的速度等的影響,因此垃圾回收器的真正執(zhí)行是在啟動(dòng)垃圾回收器后的某個(gè)時(shí)刻才能執(zhí)行?!局R(shí)點(diǎn)總結(jié)】(1)靜態(tài)成員使用static修飾符修飾。類(lèi)的每個(gè)實(shí)例都能訪問(wèn)這個(gè)類(lèi)的靜態(tài)變量和靜態(tài)方法。然而,為清晰起見(jiàn),最好使用“類(lèi)名.變量”和“類(lèi)名.方法”來(lái)訪問(wèn)靜態(tài)變量和靜態(tài)方法。(2)實(shí)例變量的初始化順序是在聲明時(shí)初始化、使用初始化塊初始化、使用構(gòu)造方法初始化。靜態(tài)變量的初始化順序是聲明時(shí)初始化、使用靜態(tài)初始化塊初始化、使用構(gòu)造方法初始化。(3)當(dāng)一個(gè)對(duì)象不再被使用,自動(dòng)調(diào)用后臺(tái)垃圾回收器銷(xiāo)毀對(duì)象,也可以調(diào)用System.gc()方法或者Runtime實(shí)例的gc()方法強(qiáng)制執(zhí)行垃圾回收器。但這些方法都不保證系統(tǒng)立即回收無(wú)用對(duì)象。編程訓(xùn)練教材習(xí)題4.7,4.8采用機(jī)房集中授課,邊講邊練,同時(shí)用啟發(fā)式、討論式等教學(xué)方法。布置課外學(xué)習(xí)任務(wù)課后思考題:1.在一個(gè)類(lèi)中可以定義兩個(gè)同名但參數(shù)類(lèi)型不同的方法嗎?在一個(gè)類(lèi)中可以定義兩個(gè)名稱(chēng)和參數(shù)列表相同,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)勤組介紹教學(xué)課件
- 內(nèi)勤業(yè)務(wù)知識(shí)培訓(xùn)課件
- 溺水救助活動(dòng)策劃方案(3篇)
- 綠化管養(yǎng)工具管理制度(3篇)
- 獸藥產(chǎn)品培訓(xùn)
- 獸醫(yī)注射技術(shù)
- 《GAT 1311-2016法庭科學(xué)印章印文鑒定意見(jiàn)規(guī)范》專(zhuān)題研究報(bào)告
- 兼職團(tuán)隊(duì)培訓(xùn)
- 養(yǎng)老院環(huán)境衛(wèi)生制度
- 企業(yè)資產(chǎn)管理制度
- 2025年新疆中考物化試卷及答案
- 配電房整改工程施工方案(2025版)
- 建筑室外亮化施工方案
- 遼寧省盤(pán)錦市名校2026屆物理九年級(jí)第一學(xué)期期末考試模擬試題含解析
- 2026屆河北唐山豐南區(qū)物理八年級(jí)第一學(xué)期期末復(fù)習(xí)檢測(cè)模擬試題含解析
- 醫(yī)療器械生產(chǎn)企業(yè)變更控制程序
- 倉(cāng)庫(kù)節(jié)日前安全培訓(xùn)計(jì)劃課件
- 關(guān)于個(gè)人述責(zé)述廉存在問(wèn)題及整改措施
- 2025通信安全員ABC證考試題庫(kù)及答案(1000題)
- 靜脈穿刺血管選擇課件
- 醫(yī)療器械- 純化水系統(tǒng)知識(shí)
評(píng)論
0/150
提交評(píng)論