第08章 內(nèi)部類與異常_第1頁(yè)
第08章 內(nèi)部類與異常_第2頁(yè)
第08章 內(nèi)部類與異常_第3頁(yè)
第08章 內(nèi)部類與異常_第4頁(yè)
第08章 內(nèi)部類與異常_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 第8章 內(nèi)部類與異常類8.1 內(nèi)部類在java中有時(shí)候會(huì)需要只定義了一兩個(gè)方法的類或者接口,該類也只被某一個(gè)類調(diào)用(實(shí)現(xiàn))。此時(shí),我們可以使用內(nèi)部類。內(nèi)部類:在一個(gè)類中定義的另一個(gè)類外嵌類:包含內(nèi)部類的類稱為內(nèi)部類的外嵌類。外嵌類的成員變量在內(nèi)部類中仍然有效,內(nèi)部類中的方法也可以調(diào)用外嵌類中的方法。8.1 內(nèi)部類內(nèi)部類的類體中不可以聲明類變量和類方法。外嵌類的類體中可以用內(nèi)部類聲明對(duì)象,作為外嵌類的成員。內(nèi)部類僅供它的外嵌類使用,其他類不可以用某個(gè)類的內(nèi)部類聲明對(duì)象例如:某種類型的農(nóng)場(chǎng)飼養(yǎng)了一種牛,但不希望其他農(nóng)場(chǎng)飼養(yǎng),則,可以將這種牛作為該農(nóng)場(chǎng)的內(nèi)部類。(例8-1)8.1 內(nèi)部類內(nèi)部類還可

2、以定義在方法體內(nèi)public class Hapiness interface Smiler public void smile(); public static void main(String args) class Happy implements Smiler public void smile() System.out.println(:-); Happy happy=new Happy(); happy.smile(); 8.2 匿名類有時(shí)候,內(nèi)部類聲明只為在類里面用它來創(chuàng)建一個(gè)對(duì)象(只用一次),因而,對(duì)很多情況而言,這個(gè)類有沒有名字,或名字叫什么無關(guān)緊要??捎锌蔁o的東西,干脆不要

3、!為了簡(jiǎn)潔開發(fā),類名使用匿名,程序員關(guān)心的只是它的實(shí)例名. 8.2 匿名類Runnable runner=new Runnable() public void run() / Run statememnt / 定義類 Public class Runner implements Runnable public void run() / do sth / 創(chuàng)建實(shí)例 Runner runner=new Runner(); 8.2.1與子類有關(guān)的匿名類如果沒有顯示聲明一個(gè)類的子類,卻又想用這個(gè)子類來創(chuàng)建對(duì)象,該怎么辦?Java中可以直接用一個(gè)類的類體來創(chuàng)建一個(gè)子類對(duì)象該類體被認(rèn)為是一個(gè)子類去掉類聲明

4、以后的類體,稱為一個(gè)匿名類8.2.1與子類有關(guān)的匿名類匿名類就是一個(gè)子類,由于無名可用,所以不可能用匿名類聲明對(duì)象,但卻可以直接用匿名類創(chuàng)建一個(gè)對(duì)象例如:Bank是類,則以下代碼就是用Bank的一個(gè)子類(匿名類)創(chuàng)建對(duì)象New Bank()匿名類的類體;Class 匿名類 extends Bank定義匿名類對(duì)象 a= new 匿名類()8.2.1與子類有關(guān)的匿名類匿名類可以繼承父類的方法也可以重寫父類的方法使用匿名類時(shí),必然是在某個(gè)類中直接用匿名類創(chuàng)建對(duì)象,因此匿名類一定是內(nèi)部類,匿名類可以訪問外嵌類中的成員變量和方法匿名類的類體中不可以聲明static成員變量和static方法8.2.1與子

5、類有關(guān)的匿名類由于匿名類是一個(gè)子類,但沒有類名,所以在用匿名類創(chuàng)建對(duì)象時(shí),要直接使用父類的構(gòu)造方法盡管匿名類創(chuàng)建的對(duì)象沒有經(jīng)過類聲明步驟,但匿名對(duì)象的引用可以傳遞給一個(gè)匹配的參數(shù),匿名類的常用的方式是向方法的參數(shù)傳值。8.2.2 和接口有關(guān)的匿名類假設(shè)Computable是一個(gè)接口,Java允許直接用接口名和一個(gè)類體創(chuàng)建一個(gè)匿名對(duì)象,此類體被認(rèn)為是實(shí)現(xiàn)了Computable接口的類去掉類聲明后的類體,稱作與接口有關(guān)的匿名類。如:new Computable() 實(shí)現(xiàn)接口的匿名類的類體;8.2.2 和接口有關(guān)的匿名類如果方法的傳遞參數(shù)是一個(gè)接口,此時(shí)可以利用匿名類作為參數(shù)傳遞給該方法。例如Voi

6、d f(Computable x)/參數(shù)x的類型為接口在調(diào)用f方法時(shí),可以傳遞一個(gè)匿名類給參數(shù)x:f(new Computable ()示例8-3演示了接口有關(guān)的匿名類的用法注意單純的嵌套類一般不建議使用!但它在java核心類中都存在,如接口Map中的Entry,我們應(yīng)該了解并能解讀這種方法. 匿名類相對(duì)而言有用得多,在解耦合和事件回調(diào)注冊(cè)中很常見,大家應(yīng)該對(duì)它的運(yùn)用融會(huì)貫通. 用得好都是優(yōu)點(diǎn),用得不好都是缺點(diǎn)。8.3 異常類所謂異常就是程序運(yùn)行時(shí)可能出現(xiàn)一些錯(cuò)誤Java的異常出現(xiàn)在方法調(diào)用過程中,即在方法調(diào)用過程中拋出異常對(duì)象,終止當(dāng)前方法的繼續(xù)執(zhí)行,同時(shí)導(dǎo)致程序運(yùn)行出現(xiàn)異常,并等待處理例如

7、,流對(duì)象在調(diào)用read方法讀取不存在的文件時(shí),會(huì)拋出異常對(duì)象:IOException,該對(duì)象可以通過調(diào)用以下方法得到或輸出有關(guān)異常信息Public String getMessage();Public void printStackTrace();Public String toString();8.3.1 trycatch語句Java使用trycatch語句來處理異常將可能出現(xiàn)的異常操作放在trycatch語句的try部分將發(fā)生異常后的處理放在catch部分當(dāng)try部分中的某個(gè)方法調(diào)用發(fā)生異常后,try部分將立刻結(jié)束執(zhí)行,而轉(zhuǎn)向執(zhí)行相應(yīng)的catch部分trycatch語句可以由幾個(gè)catch

8、組成,分別處理發(fā)生的相應(yīng)異常8.3.1 trycatch語句trycatch語句的格式如下:各個(gè)catch參數(shù)中的異常類都是Exception的某個(gè)子類,表明try部分可能發(fā)生的異常,這些子類之間不能有父子關(guān)系,否則保留一個(gè)含有父類參數(shù)的catch即可。try 包含可能發(fā)生異常的語句catch(ExceptionSubClass1 e) catch(ExceptionSubClass2 e) 8.3.2 自定義異常類通過擴(kuò)展Exception類定義自己的異常類,然后根據(jù)程序的需要來規(guī)定哪些方法產(chǎn)生這樣的異常。一個(gè)方法在聲明時(shí)可以使用throws關(guān)鍵字聲明要產(chǎn)生的若干個(gè)異常,并在該方法的方法體中

9、具體給出產(chǎn)生異常的操作,即用相應(yīng)的異常類創(chuàng)建對(duì)象,并使用throw關(guān)鍵字拋出該異常對(duì)象,導(dǎo)致該方法結(jié)束執(zhí)行。程序必須在trycatch塊語句中調(diào)用能發(fā)生異常的方法,其中catch的作用就是捕獲throw方法拋出的異常對(duì)象8.4斷言斷言語句在調(diào)試代碼階段非常有用,斷言語句一般用于程序不準(zhǔn)備通過捕獲異常來處理的錯(cuò)誤使用關(guān)鍵字assert聲明一條斷言語句,斷言語句有以下兩種格式:assert booleanExpression;assert booleanExpression:messageException;其中booleanExpression必須是求值為boolean型的表達(dá)式;messageException可以是求值為字符串的表達(dá)式。8.4斷言assert booleanExpression;booleanExpression=false,程序從斷言語句處停止執(zhí)行booleanExpression=true,程序從斷言語句處繼續(xù)執(zhí)行。assert booleanExpression:mes

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論