第8章JAVA異常處理_第1頁(yè)
第8章JAVA異常處理_第2頁(yè)
第8章JAVA異常處理_第3頁(yè)
第8章JAVA異常處理_第4頁(yè)
第8章JAVA異常處理_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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、第第8講講 JAVA異常處理異常處理主要內(nèi)容主要內(nèi)容p 異常概述異常概述p 異常類異常類 p 用戶自定義異常類用戶自定義異常類 p 異常的進(jìn)一步討論異常的進(jìn)一步討論 p 本講小結(jié)本講小結(jié)2022-3-18異常處理2異常概念異常概念 一般來(lái)說(shuō),程序在運(yùn)行過(guò)程中各種情況都有可能一般來(lái)說(shuō),程序在運(yùn)行過(guò)程中各種情況都有可能發(fā)生,出現(xiàn)錯(cuò)誤是難免的。發(fā)生,出現(xiàn)錯(cuò)誤是難免的。JavaJava把程序運(yùn)行時(shí)的把程序運(yùn)行時(shí)的可能遇到的錯(cuò)誤分為兩類:可能遇到的錯(cuò)誤分為兩類:u 非致命錯(cuò)誤非致命錯(cuò)誤 通過(guò)某種簡(jiǎn)單處理后,程序還能繼通過(guò)某種簡(jiǎn)單處理后,程序還能繼續(xù)執(zhí)行。稱這類錯(cuò)誤為異常。續(xù)執(zhí)行。稱這類錯(cuò)誤為異常。 如:

2、文件不存在、無(wú)效的下標(biāo)、空對(duì)象引用、算如:文件不存在、無(wú)效的下標(biāo)、空對(duì)象引用、算術(shù)運(yùn)算零做除數(shù)等等。術(shù)運(yùn)算零做除數(shù)等等。u 致命錯(cuò)誤致命錯(cuò)誤 即程序遇到了非常嚴(yán)重的不正常狀態(tài),即程序遇到了非常嚴(yán)重的不正常狀態(tài),不能繼續(xù)執(zhí)行。稱這類問(wèn)題為錯(cuò)誤不能繼續(xù)執(zhí)行。稱這類問(wèn)題為錯(cuò)誤。 如:鏈接錯(cuò)誤、虛擬機(jī)錯(cuò)誤等系統(tǒng)內(nèi)部錯(cuò)誤。如:鏈接錯(cuò)誤、虛擬機(jī)錯(cuò)誤等系統(tǒng)內(nèi)部錯(cuò)誤。 所謂異常所謂異常, ,實(shí)際上是程序中的錯(cuò)誤導(dǎo)致了中斷指實(shí)際上是程序中的錯(cuò)誤導(dǎo)致了中斷指令流正常執(zhí)行的一種事件。令流正常執(zhí)行的一種事件。2022-3-18異常處理3異常概念異常概念 要保證程序的質(zhì)量,就必須在程序中處理可能發(fā)要保證程序的質(zhì)量,就必

3、須在程序中處理可能發(fā)生的各種錯(cuò)誤。生的各種錯(cuò)誤。Java采用了異常的拋出和異常的采用了異常的拋出和異常的捕獲處理機(jī)制,和傳統(tǒng)的方法相比有以下優(yōu)點(diǎn)捕獲處理機(jī)制,和傳統(tǒng)的方法相比有以下優(yōu)點(diǎn):u 把錯(cuò)誤代碼從常規(guī)代碼中分離出來(lái);把錯(cuò)誤代碼從常規(guī)代碼中分離出來(lái);u 一旦發(fā)生異常,即產(chǎn)生一個(gè)異常對(duì)象,并將它傳一旦發(fā)生異常,即產(chǎn)生一個(gè)異常對(duì)象,并將它傳遞給調(diào)用堆棧;遞給調(diào)用堆棧;u 按錯(cuò)誤類型和錯(cuò)誤差別分組;按錯(cuò)誤類型和錯(cuò)誤差別分組;u 提供了對(duì)于一些無(wú)法預(yù)測(cè)的錯(cuò)誤的捕獲和處理;提供了對(duì)于一些無(wú)法預(yù)測(cè)的錯(cuò)誤的捕獲和處理;u 提供了完整的錯(cuò)誤信息。提供了完整的錯(cuò)誤信息。2022-3-18異常處理4異常類異常

4、類2022-3-18異常處理5基類基類Throwable 常用構(gòu)造方法常用構(gòu)造方法 Throwable() 創(chuàng)建詳細(xì)消息為創(chuàng)建詳細(xì)消息為null的對(duì)象的對(duì)象. Throwable(String mess) 創(chuàng)建詳細(xì)消息為創(chuàng)建詳細(xì)消息為mess的對(duì)象的對(duì)象. Throwable(Throwable cause) 創(chuàng)建詳細(xì)消息為創(chuàng)建詳細(xì)消息為cause的的對(duì)象對(duì)象. 常用方法常用方法 public String getMessage() 返回此對(duì)象的詳細(xì)消息返回此對(duì)象的詳細(xì)消息. public String toString() 返回對(duì)象的簡(jiǎn)短描述。返回對(duì)象的簡(jiǎn)短描述。 public void p

5、rintStackTrace() 將此對(duì)象及其追蹤輸出至標(biāo)將此對(duì)象及其追蹤輸出至標(biāo)準(zhǔn)錯(cuò)誤流。準(zhǔn)錯(cuò)誤流。 public void printStackTrace(PrintStream s) 將此對(duì)象及其將此對(duì)象及其追蹤信息輸出到輸出流追蹤信息輸出到輸出流s。 public void printStackTrace(PrintWriter s) 將此對(duì)象及其將此對(duì)象及其追蹤信息輸出到追蹤信息輸出到PrintWriter對(duì)象對(duì)象s。2022-3-18異常處理6異常處理異常處理 u 拋出異常拋出異常 當(dāng)當(dāng)Java應(yīng)用程序出現(xiàn)錯(cuò)誤時(shí),會(huì)產(chǎn)生一個(gè)異常對(duì)象,應(yīng)用程序出現(xiàn)錯(cuò)誤時(shí),會(huì)產(chǎn)生一個(gè)異常對(duì)象,這個(gè)對(duì)象

6、包含了異常的類型和錯(cuò)誤出現(xiàn)時(shí)程序所處這個(gè)對(duì)象包含了異常的類型和錯(cuò)誤出現(xiàn)時(shí)程序所處的狀態(tài)信息。把異常對(duì)象遞交給調(diào)用堆棧的過(guò)程稱的狀態(tài)信息。把異常對(duì)象遞交給調(diào)用堆棧的過(guò)程稱為拋出。為拋出。u 捕獲異常捕獲異常 異常發(fā)生后,被傳遞給堆棧,程序沿著被調(diào)用的順異常發(fā)生后,被傳遞給堆棧,程序沿著被調(diào)用的順序往前尋找序往前尋找,只要找到符合該異常種類的處理代碼只要找到符合該異常種類的處理代碼,就就將異常交給這部分程序代碼去處理。這一過(guò)程叫作將異常交給這部分程序代碼去處理。這一過(guò)程叫作捕獲。捕獲。2022-3-18異常處理7拋出異常拋出異常 拋出異常有兩種方式:一是系統(tǒng)自動(dòng)拋出異常;二拋出異常有兩種方式:一是

7、系統(tǒng)自動(dòng)拋出異常;二是程序開(kāi)發(fā)者根據(jù)設(shè)計(jì)要求在程序中主動(dòng)創(chuàng)建異常是程序開(kāi)發(fā)者根據(jù)設(shè)計(jì)要求在程序中主動(dòng)創(chuàng)建異常對(duì)象,若遇到錯(cuò)誤便拋出異常。對(duì)象,若遇到錯(cuò)誤便拋出異常。 在程序中拋出異常的語(yǔ)句:在程序中拋出異常的語(yǔ)句:u throw語(yǔ)句語(yǔ)句 throw 異常類對(duì)象;異常類對(duì)象; 該語(yǔ)句一般用于自定義異常的拋出。該語(yǔ)句一般用于自定義異常的拋出。u Throws 子句子句 定義方法拋出異常。其一般格式是:定義方法拋出異常。其一般格式是: 訪問(wèn)符訪問(wèn)符 修飾符修飾符 類型類型 方法名方法名(形參表形參表) throws 異常表異常表 如果知道在方法中會(huì)產(chǎn)生異常,但并不確切知道如何對(duì)異常如果知道在方法中會(huì)

8、產(chǎn)生異常,但并不確切知道如何對(duì)異常進(jìn)行處理或無(wú)需對(duì)異常進(jìn)行處理時(shí),我們只需拋出異常。進(jìn)行處理或無(wú)需對(duì)異常進(jìn)行處理時(shí),我們只需拋出異常。示例示例1實(shí)現(xiàn)實(shí)現(xiàn)2022-3-18異常處理8異常的處理異常的處理 try 語(yǔ)句塊語(yǔ)句塊 /可能產(chǎn)生異常的代碼段可能產(chǎn)生異常的代碼段catch(異常類型異常類型, 參數(shù)參數(shù)) 語(yǔ)句塊語(yǔ)句塊 /異常處理代碼段異常處理代碼段catch(異常類型異常類型1, 參數(shù)參數(shù)1) 語(yǔ)句塊語(yǔ)句塊 /異常處理代碼段異常處理代碼段 catch(異常類型異常類型n, 參數(shù)參數(shù)n) 語(yǔ)句塊語(yǔ)句塊 /異常處理代碼段異常處理代碼段 finally 語(yǔ)句塊語(yǔ)句塊/不論異常是否發(fā)生,均應(yīng)執(zhí)行的

9、代碼段不論異常是否發(fā)生,均應(yīng)執(zhí)行的代碼段 trycatchfinally語(yǔ)句語(yǔ)句塊的結(jié)構(gòu),對(duì)程序中拋塊的結(jié)構(gòu),對(duì)程序中拋出的異常進(jìn)行捕捉處理。出的異常進(jìn)行捕捉處理。結(jié)構(gòu)的一般格式:結(jié)構(gòu)的一般格式:包含可能引發(fā)一個(gè)或多個(gè)異常的代碼。所希望捕捉的可能會(huì)引發(fā)異常的語(yǔ)句代碼必須放在該塊中。 包含著用于處理某一特定類型異常的代碼段。try塊中可能會(huì)拋出多個(gè)異常,要捕捉并處理這些異常,就需要對(duì)應(yīng)有多個(gè)catch代碼塊。每一個(gè)catch代碼塊只能對(duì)應(yīng)處理一類異常。 finally代碼塊總是在方法結(jié)束前執(zhí)行。用于處理一些遺留問(wèn)題。 2022-3-18異常處理9常見(jiàn)的異常常見(jiàn)的異常u ArithmeticExc

10、eptionu ArrayIndexOutOfBandsExceptionu ArrayStoreExceptionu IOExceptionu FileNotFoundExceptionu NullPointerExceptionu MalformedURLExceptionu NumberFormatExceptionu OutOfMemoryException程序程序24示例實(shí)現(xiàn)示例實(shí)現(xiàn)2022-3-18異常處理10用戶自定義異常類用戶自定義異常類 當(dāng)有以下需求時(shí):當(dāng)有以下需求時(shí):u希望當(dāng)一個(gè)標(biāo)準(zhǔn)異常出現(xiàn)時(shí)添加信息;希望當(dāng)一個(gè)標(biāo)準(zhǔn)異常出現(xiàn)時(shí)添加信息;u對(duì)于一些特殊的應(yīng)用,代碼中需要一些出

11、錯(cuò)條件以明確區(qū)對(duì)于一些特殊的應(yīng)用,代碼中需要一些出錯(cuò)條件以明確區(qū)分出某種特定的異常。分出某種特定的異常。 我們可以定義自己的異常類并創(chuàng)建異常對(duì)象來(lái)處理自己程我們可以定義自己的異常類并創(chuàng)建異常對(duì)象來(lái)處理自己程序中的運(yùn)行錯(cuò)誤。自定義異常類必須遵循:序中的運(yùn)行錯(cuò)誤。自定義異常類必須遵循:u 以以Throwable作為超類,即它必須是作為超類,即它必須是Throwable類的子類類的子類(直接或間接)(直接或間接);u 可以從任何一個(gè)標(biāo)準(zhǔn)異常類派生出自定義異常類,但提倡可以從任何一個(gè)標(biāo)準(zhǔn)異常類派生出自定義異常類,但提倡從從Exception異常類派生。異常類派生。例:例:在前邊的學(xué)生成績(jī)錄入程序中在前

12、邊的學(xué)生成績(jī)錄入程序中,要控制成績(jī)的輸入范圍要控制成績(jī)的輸入范圍, 建立一個(gè)異常類,當(dāng)輸入的成績(jī)不是規(guī)定范圍內(nèi)的數(shù)據(jù)時(shí)建立一個(gè)異常類,當(dāng)輸入的成績(jī)不是規(guī)定范圍內(nèi)的數(shù)據(jù)時(shí),引發(fā)該異常并進(jìn)行相關(guān)處理。引發(fā)該異常并進(jìn)行相關(guān)處理。2022-3-18異常處理11定義異常類定義異常類ResultOutOfBoundsException /*這是一個(gè)定義成績(jī)超出規(guī)定范圍的異常類這是一個(gè)定義成績(jī)超出規(guī)定范圍的異常類 *類名是類名是: ResultOutOfBoundsException */public class ResultOutOfBoundsException extends Exception Re

13、sultOutOfBoundsException() /構(gòu)造方法構(gòu)造方法 super(成績(jī)數(shù)據(jù)超限錯(cuò)誤成績(jī)數(shù)據(jù)超限錯(cuò)誤!); public String toString() /返回信息方法返回信息方法 return 成績(jī)數(shù)據(jù)超限錯(cuò)誤成績(jī)數(shù)據(jù)超限錯(cuò)誤!成績(jī)不能為負(fù)值,也不能超出成績(jī)不能為負(fù)值,也不能超出規(guī)定的范圍規(guī)定的范圍!; 2022-3-18異常處理12定義成績(jī)類定義成績(jī)類Result /*這是一個(gè)定義學(xué)生成績(jī)的類這是一個(gè)定義學(xué)生成績(jī)的類 *類名是類名是: Result */ public class Result String student_no; int rs1; Result()

14、/構(gòu)造方法構(gòu)造方法1 student_no=00000000000; rs1=0; / 構(gòu)造方法構(gòu)造方法1結(jié)束結(jié)束 Result(String no,int r1)/構(gòu)造方法構(gòu)造方法2 student_no=no; rs1=r1; / 構(gòu)造方法構(gòu)造方法2結(jié)束結(jié)束 /*定義方法定義方法isResult() 拋出異常拋出異常*/ public boolean isResult() throws ResultOutOfBoundsException if ( rs1100 ) throw new ResultOutOfBoundsException(); else return true; / 方法

15、方法isResult結(jié)束結(jié)束示例演示示例演示2022-3-18異常處理13異常的進(jìn)一步討論異常的進(jìn)一步討論 u層次性問(wèn)題層次性問(wèn)題 u嵌套性問(wèn)題嵌套性問(wèn)題 u有效使用問(wèn)題有效使用問(wèn)題 try . /可能發(fā)生異常的代碼段可能發(fā)生異常的代碼段 .catch(Exception e) . /對(duì)捕捉到異常的處理代碼對(duì)捕捉到異常的處理代碼catch(ArrayIndexOutOfBoundsException e1) . /對(duì)捕捉到異常的處理代碼對(duì)捕捉到異常的處理代碼catch(ArithmeticException e2) . /對(duì)捕捉到異常的處理代碼對(duì)捕捉到異常的處理代碼try /可能發(fā)生異常的代碼

16、段可能發(fā)生異常的代碼段 try /可能發(fā)生異常的代碼段可能發(fā)生異常的代碼段 catch() /對(duì)捕捉到異常的處理代碼對(duì)捕捉到異常的處理代碼/ catch( ) try catch(.) public void displayString(String str) try catch(NullPointerException e) 引用錯(cuò)誤!這個(gè)字符串是一個(gè)空對(duì)象引用錯(cuò)誤!這個(gè)字符串是一個(gè)空對(duì)象”); public void displayString(String str) if(str!=null) else 引用錯(cuò)誤!這個(gè)字符串是一個(gè)空對(duì)象引用錯(cuò)誤!這個(gè)字符串是一個(gè)空對(duì)象”); 2022-3-18異常處理14本講小結(jié)本講小結(jié) 本講主要講述了本講主要講述了Java中的異常及異常處理的基本中的異常及異常處理的基本概念,異常及異常處理的應(yīng)用。概念,異常

溫馨提示

  • 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)論