第8章JAVA異常處理_第1頁
第8章JAVA異常處理_第2頁
第8章JAVA異常處理_第3頁
第8章JAVA異常處理_第4頁
第8章JAVA異常處理_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第8講講 JAVA異常處理異常處理主要內(nèi)容主要內(nèi)容p 異常概述異常概述p 異常類異常類 p 用戶自定義異常類用戶自定義異常類 p 異常的進一步討論異常的進一步討論 p 本講小結(jié)本講小結(jié)2022-3-18異常處理2異常概念異常概念 一般來說,程序在運行過程中各種情況都有可能一般來說,程序在運行過程中各種情況都有可能發(fā)生,出現(xiàn)錯誤是難免的。發(fā)生,出現(xiàn)錯誤是難免的。JavaJava把程序運行時的把程序運行時的可能遇到的錯誤分為兩類:可能遇到的錯誤分為兩類:u 非致命錯誤非致命錯誤 通過某種簡單處理后,程序還能繼通過某種簡單處理后,程序還能繼續(xù)執(zhí)行。稱這類錯誤為異常。續(xù)執(zhí)行。稱這類錯誤為異常。 如:

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

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

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

5、rintStackTrace() 將此對象及其追蹤輸出至標將此對象及其追蹤輸出至標準錯誤流。準錯誤流。 public void printStackTrace(PrintStream s) 將此對象及其將此對象及其追蹤信息輸出到輸出流追蹤信息輸出到輸出流s。 public void printStackTrace(PrintWriter s) 將此對象及其將此對象及其追蹤信息輸出到追蹤信息輸出到PrintWriter對象對象s。2022-3-18異常處理6異常處理異常處理 u 拋出異常拋出異常 當當Java應用程序出現(xiàn)錯誤時,會產(chǎn)生一個異常對象,應用程序出現(xiàn)錯誤時,會產(chǎn)生一個異常對象,這個對象

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

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

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

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

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

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

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

13、sultOutOfBoundsException() /構(gòu)造方法構(gòu)造方法 super(成績數(shù)據(jù)超限錯誤成績數(shù)據(jù)超限錯誤!); public String toString() /返回信息方法返回信息方法 return 成績數(shù)據(jù)超限錯誤成績數(shù)據(jù)超限錯誤!成績不能為負值,也不能超出成績不能為負值,也不能超出規(guī)定的范圍規(guī)定的范圍!; 2022-3-18異常處理12定義成績類定義成績類Result /*這是一個定義學生成績的類這是一個定義學生成績的類 *類名是類名是: 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異常的進一步討論異常的進一步討論 u層次性問題層次性問題 u嵌套性問題嵌套性問題 u有效使用問題有效使用問題 try . /可能發(fā)生異常的代碼段可能發(fā)生異常的代碼段 .catch(Exception e) . /對捕捉到異常的處理代碼對捕捉到異常的處理代碼catch(ArrayIndexOutOfBoundsException e1) . /對捕捉到異常的處理代碼對捕捉到異常的處理代碼catch(ArithmeticException e2) . /對捕捉到異常的處理代碼對捕捉到異常的處理代碼try /可能發(fā)生異常的代碼

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

溫馨提示

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

評論

0/150

提交評論