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

下載本文檔

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

文檔簡介

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

try{

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

}

catch(異常類名1

對象名1){

處理語句組1;

}

catch(異常類名2

對象名2){

處理語句組2;

}……

finally{

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

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)”的錯誤,應(yīng)用捕捉對應(yīng)的ArrayIndexOutOfBoundsException對象。廣東工業(yè)大學(xué)計算機學(xué)院112.catch語句catch語句的參數(shù)類似于方法的聲明,包括一個異常類型和一個異常對象。catch(異常類名1

對象名1){

處理語句組1;

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

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

throws

exceptionList

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

throwThrowableObject

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

ArithmeticExcetpione=newArithmeticException();throwe;

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

(1)因為Error類通常用于系統(tǒng)內(nèi)嚴(yán)重的硬件錯誤。(2)并且在多數(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論