java程序設(shè)計(jì)基礎(chǔ)wxcodingbugott獲取有趣有用學(xué)習(xí)資源-語(yǔ)言第3章異常處理_第1頁(yè)
java程序設(shè)計(jì)基礎(chǔ)wxcodingbugott獲取有趣有用學(xué)習(xí)資源-語(yǔ)言第3章異常處理_第2頁(yè)
java程序設(shè)計(jì)基礎(chǔ)wxcodingbugott獲取有趣有用學(xué)習(xí)資源-語(yǔ)言第3章異常處理_第3頁(yè)
java程序設(shè)計(jì)基礎(chǔ)wxcodingbugott獲取有趣有用學(xué)習(xí)資源-語(yǔ)言第3章異常處理_第4頁(yè)
java程序設(shè)計(jì)基礎(chǔ)wxcodingbugott獲取有趣有用學(xué)習(xí)資源-語(yǔ)言第3章異常處理_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第三章異常與調(diào)試廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院2本章內(nèi)容3.1異常的基本概念3.2異常處理的種類3.3異常與繼承3.4異常處理機(jī)制的優(yōu)點(diǎn)和使用原則廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院33.1.1什么是異常?異常是在程序運(yùn)行過(guò)程中發(fā)生的異常事件。例如:除0溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻止程序的正常運(yùn)行。程序設(shè)計(jì)時(shí),程序員必須考慮到可能發(fā)生的異常事件并做出相應(yīng)的處理。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院43.1.2異常處理機(jī)制異常處理機(jī)制:Java通過(guò)面向?qū)ο蟮姆椒▉?lái)處理異常。即在一個(gè)方法的運(yùn)行過(guò)程中,如果發(fā)生了異常,則這個(gè)方法生成一個(gè)代表該異常的對(duì)象,并把它交給運(yùn)行時(shí)系統(tǒng),運(yùn)行時(shí)系統(tǒng)尋找相應(yīng)的代碼來(lái)處理這一異常。有兩個(gè)重要的概念:1.拋出異常:將異常事件生成異常對(duì)象并把它提交給運(yùn)行時(shí)系統(tǒng)的過(guò)程稱為拋出(throw)一個(gè)異常。2.捕獲異常:運(yùn)行時(shí)系統(tǒng)在方法的調(diào)用棧中查找,從生成異常的方法開始進(jìn)行回朔,直到找到包含相應(yīng)異常處理的方法為止,這一個(gè)過(guò)程稱為捕獲(catch)一個(gè)異常。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院53.1.3Throwable類及其子類要用面向?qū)ο蟮姆椒ㄌ幚懋惓#捅仨毥㈩惖膶哟?。類Throwable位于這一類層次的最頂層,只有它的子類對(duì)象才可以作為一個(gè)異常被拋出和捕獲。Java中的異常層次結(jié)構(gòu)分支1分支2分支2.1分支2.2~2.x廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院6異常層次結(jié)構(gòu)的分支Error類(如動(dòng)態(tài)鏈接錯(cuò)誤等),由Java虛擬機(jī)生成并拋出。一般的Java應(yīng)用程序不處理這類異常。2.Exception類是Java程序生成或拋出的對(duì)象。它有各種不同的子類分別對(duì)應(yīng)于不同類型的異常。(1)RunTimeException類及其繼承類,稱作運(yùn)行時(shí)異常。Java程序在運(yùn)行時(shí)生成異常,例如被0除、數(shù)組下標(biāo)越界、訪問(wèn)空引用等。(2)除此(RunTimeException)之外,其他則被稱作非運(yùn)行時(shí)異常,例如輸入輸出異常。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院73.2異常處理的種類異常處理可以有以下幾種:對(duì)運(yùn)行時(shí)發(fā)生的異常可以不做處理;使用try-catch-finally語(yǔ)句捕獲異常;通過(guò)throws子句聲明拋棄異常;定義自己的異常類,并用throw語(yǔ)句拋出異常;廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院83.2.1運(yùn)行時(shí)異常運(yùn)行時(shí)異常是由Java運(yùn)行時(shí)系統(tǒng)在程序的運(yùn)行過(guò)程中檢測(cè)到的。它可能在程序的任意部位發(fā)生,而且其數(shù)量可能很大,因此Java編譯器允許程序員不對(duì)它進(jìn)行處理。這時(shí),Java運(yùn)行時(shí)系統(tǒng)會(huì)把生成的運(yùn)行時(shí)異常對(duì)象交給缺省的異常處理程序,在標(biāo)準(zhǔn)輸出上顯示異常的內(nèi)容以及發(fā)生異常的位置。例如:廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院93.2.2捕獲異常我們可以用try–catch-finally語(yǔ)句來(lái)捕獲一個(gè)或多個(gè)異常,語(yǔ)法結(jié)構(gòu)如下:

try{

可能產(chǎn)生異常的代碼段;

}

catch(異常類名1

對(duì)象名1){

處理語(yǔ)句組1;

}

catch(異常類名2

對(duì)象名2){

處理語(yǔ)句組2;

}……

finally{

最終處理語(yǔ)句;}廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院101.try語(yǔ)句try語(yǔ)句用花括號(hào){}指定了一段代碼,該段代碼為可能發(fā)生異常的語(yǔ)句。例如:

try{int[]a={1,2,3,4,5};intsum=0;for(inti=0;i<=5;i++)sum=sum+a[i];System.out.println(sum);}這段代碼可能產(chǎn)生引用了“超出數(shù)組下標(biāo)”的錯(cuò)誤,應(yīng)用捕捉對(duì)應(yīng)的ArrayIndexOutOfBoundsException對(duì)象。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院112.catch語(yǔ)句catch語(yǔ)句的參數(shù)類似于方法的聲明,包括一個(gè)異常類型和一個(gè)異常對(duì)象。catch(異常類名1

對(duì)象名1){

處理語(yǔ)句組1;

}異常類名指明了catch語(yǔ)句所處理的異常類型,必須為Throwable類的子類,異常對(duì)象則由運(yùn)行時(shí)系統(tǒng)在try所指定的代碼塊中生成并被捕獲,花括號(hào){}中包含對(duì)象的處理,其中可以調(diào)用對(duì)象的方法。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院122.catch語(yǔ)句(續(xù))catch語(yǔ)句可以有多個(gè),分別處理不同類型的異常。拋出一個(gè)異常對(duì)象后,Java運(yùn)行時(shí)系統(tǒng)從上到下分別對(duì)每個(gè)catch語(yǔ)句處理的異常類型進(jìn)行檢測(cè),直到找到某條catch語(yǔ)句所處理的異常類型與產(chǎn)生的異常類型完全匹配為止。因此,catch語(yǔ)句的排列順序應(yīng)該是從特殊到一般。也可以用一個(gè)catch語(yǔ)句處理多個(gè)異常類型,這時(shí)它的異常類型參數(shù)應(yīng)該是多個(gè)異常類型的父類,程序設(shè)計(jì)中要根據(jù)具體的情況來(lái)選擇catch語(yǔ)句的異常處理類型。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院133.finally語(yǔ)句無(wú)論try所指定的程序塊中是否異常,也無(wú)論catch語(yǔ)句的異常類型是否與所拋出的異常的類型一致,finally所指定的代碼都要被執(zhí)行,即它提供了統(tǒng)一的出口。通常在finally語(yǔ)句中可以進(jìn)行資源的清除工作。如關(guān)閉打開的文件等。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院143.2.3聲明拋棄異常在某些情況,如果在一個(gè)方法中生成異常對(duì)象,但是這一方法并不知道該如何處理異常對(duì)象時(shí),該方法就應(yīng)該聲明拋棄異常。即使得異常對(duì)象可以從調(diào)用棧向后傳播,直到有合適的方法捕獲它為止。

通過(guò)方法聲明中的throws子句加以定義的,其格式如下:returnTypemethodName([paramlist])

throws

exceptionList

其中exceptionList中可以聲明多個(gè)異常,用逗號(hào)隔開注意:對(duì)非運(yùn)行時(shí)的異常,或throw語(yǔ)句拋出的異常,必須進(jìn)行捕獲或者聲明拋棄廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院153.2.4拋出異常由Java系統(tǒng)檢測(cè)到某些異常條件后,隱式地拋出異常對(duì)象程序員檢測(cè)到某些異常條件(與業(yè)務(wù)邏輯相關(guān)的事件)后,需要顯示地拋出異常對(duì)象。例如,存款不足不可以取款,或用戶無(wú)合法的訪問(wèn)權(quán)限等廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院16throw語(yǔ)句Throw語(yǔ)句格式為:

throwThrowableObject

其中ThrowableObject必須是Throwable類或其子類的對(duì)象。例如:

ArithmeticExcetpione=newArithmeticException();throwe;

thrownewArithmeticException();廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院173.2.5創(chuàng)建異常類當(dāng)遇到任何標(biāo)準(zhǔn)異常類都不能恰當(dāng)?shù)孛枋銮宄?dāng)前問(wèn)題的時(shí)候,需要自定義異常類。由Exception類或者其子類中派生。只有兩個(gè)成員:缺省的構(gòu)造方法(無(wú)參數(shù)的構(gòu)造方法)和帶一個(gè)字符串類型的構(gòu)造方法。自定義異常類中通常沒(méi)有什么行為,僅用于標(biāo)識(shí)一種異常的對(duì)象廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院183.3異常與繼承對(duì)于子類中的重定義方法(1)子類中的重定義方法不可拋出父類方法未聲明的異常,除非這些異常是父類聲明的異常的子類型異常(2)子類中的重定義方法可以不拋出父類方法聲明的異常對(duì)于子類中的構(gòu)造方法(1)子類的構(gòu)造方法必須聲明拋出父類構(gòu)造方法聲明的異常,因?yàn)楦割悩?gòu)造方法總是會(huì)被顯式或隱式地被調(diào)用(2)子類的構(gòu)造方法可以引入任何新類型的異常廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院193.3異常與繼承異常說(shuō)明的多繼承多繼承結(jié)果:以所有父類及所有父接口聲明的異常交集作為規(guī)格說(shuō)明(1)子類中重定義的方法要么不聲明拋出任何異常(2)要么聲明的每一異常都必須與任一父類型的異常類型兼容廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院203.4.1異常處理機(jī)制的優(yōu)點(diǎn)1.Java通過(guò)面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常事件進(jìn)行分類,體現(xiàn)了良好的層次性,提供了良好的接口,這種機(jī)制對(duì)于具有動(dòng)態(tài)運(yùn)行特性的復(fù)雜程序提供了強(qiáng)有力的控制方式。2.Java的異常處理機(jī)制使得處理異常的代碼和“常規(guī)”代碼分開,減少了代碼的數(shù)量,增強(qiáng)了程序的可讀性。(大家可以比較一下C語(yǔ)言中用if語(yǔ)句來(lái)處理異常的情形,這時(shí)需要進(jìn)行一系列條件的判定)。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院21異常處理機(jī)制的優(yōu)點(diǎn)(續(xù))3.Java的異常處理機(jī)制使得異常事件可以沿調(diào)用棧自動(dòng)向上傳播,而不是C語(yǔ)言中通過(guò)函數(shù)的返回值來(lái)傳播,這樣可以傳遞更完善的信息并且簡(jiǎn)化代碼的編寫。4.由于把異常事件當(dāng)成對(duì)象來(lái)處理,利用類的層次性既可以把多個(gè)具有相同父類的異常統(tǒng)一處理,也可以區(qū)分不同的異常分別處理,使用非常靈活。廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院223.4.2異常處理機(jī)制的使用原則對(duì)非運(yùn)行時(shí)異常必須捕獲或聲明拋棄,而對(duì)運(yùn)行時(shí)異常則不必,可以交給Java運(yùn)行時(shí)系統(tǒng)來(lái)處理。對(duì)于自定義的異常類,通常把它作為類Exception子類,而不作為類Error的子類。

(1)因?yàn)镋rror類通常用于系統(tǒng)內(nèi)嚴(yán)重的硬件錯(cuò)誤。(2)并且在多數(shù)情況下,不要把自定

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論