版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章Java中的異常處理機制0102038.1異常的含義及分類8.2異常處理8.3思考和練習(1)異常的含義所謂異常,就是程序運行過程中出現的一些錯誤。當然,這些錯誤不是程序的語法錯誤,異常與我們平時編寫程序出現的語法錯誤是兩碼事。例如,做除法時除數為零的情況,還比如打開一個不存在的文件或者數據庫。異常處理將會無形中改變程序的控制流程,目的是讓程序有機會來對出現的錯誤做出響應。(2)異常的分類Java中異常是一個對象,繼承于Throwable這個類,所有的Throwable類的繼承類所產生的對象都是異常(有時也稱為例外)。從Throwable類派生出的異常類有Exception(異常)和Error(錯誤)。8.1異常的含義及分類3Throwable父類和Exception(異常)和Error(錯誤)的關系結構如下:Throwable
//父類(下面兩個類相同的共性抽取出來的)
|--Error
|--Excption
//兩個子類(里面定義了很多問題(異常出現))
Error(錯誤):一般是指Java虛擬機相關的問題,如系統(tǒng)崩潰、虛擬機出錯誤、動態(tài)鏈接失敗等,這種錯誤無法恢復或不可能捕獲,將導致應用程序中斷,通常應用程序無法處理這些錯誤,因此應用程序不應該捕獲Error對象,也無須在其throws子句中聲明該方法拋出任何Error或其子類。8.1異常的含義及分類Exception(異常):Exception
類及其子類是
Throwable
的一種形式,它指出了合理的應用程序想要捕獲的條件:SQLException:該異常提供關于數據庫訪問錯誤或其他錯誤的信息。RuntimeException
:是那些可能在Java虛擬機正常運行期間拋出的異常的超類。IOException:此類為異常的通用類,它是由失敗的或中斷的I/O操作生成的。8.1異常的含義及分類5Throwable():Throwable
類是Java語言中所有錯誤或異常的超類。只有當對象是此類(或其子類之一)的實例時,才能通過Java虛擬機或者Java
throw
語句拋出。類似地,只有此類或其子類之一才可以是
catch
子句中的參數類型。異常對象包含的常用方法:getMessage():返回該異常的詳細描述字符printStackTrace():將該異常的跟蹤棧信息輸出到標準錯誤輸出。printStackTrace(PrintStreams):將該異常的跟蹤棧信息輸出
到指定的輸出流。getStackTrace():返回該異常的跟蹤棧信息。8.1異常的含義及分類(1)處理語句Java異常機制主要依賴于try、catch、finally、throw、throws五個關鍵字。try--catch結構是異常處理最基本的結構。在這種結構中,可能引發(fā)的異常語句封裝在try程序體中,而處理異常的相應語句封裝在catch程序體中。try--catch結構格式如下:try{
需要被檢測的代碼;}catch{處理異常的代碼;(處理方式)}finally{一定會執(zhí)行的代碼;(處理方式)}8.2異常處理7try:它里面放置可能引發(fā)異常的代碼catch:后面對應異常類型和一個代碼塊,用于表明該catch塊用于處理這種類型異常的代碼塊,可以有多個catch塊。finally:主要用于回收在try塊里打開的資源(如數據庫連接、網絡連接和磁盤文件),異常機制總是保證finally塊總是被執(zhí)行。只有finally塊,執(zhí)行完成之后,才會回來執(zhí)行try或者catch塊中的return或者throw語句,如果finally中使用了return或者
throw等終止方法的語句,則就不會跳回執(zhí)行,直接停止。throw:用于拋出一個實際的異常,可以單獨作為語句使用,拋出一個具體的異常對象。throws:用在方法簽名中,用于聲明該方法可能拋出的異常。8.2異常處理(2)執(zhí)行步驟:如果執(zhí)行try塊中的業(yè)務邏輯代碼時出現異常,系統(tǒng)自動生成一個異常對象,該異常對象被提交給Java運行環(huán)境,這個過程稱為拋出(throw)異常。當Java運行環(huán)境收到異常對象時,會尋找能處理該異常對象的catch塊,如果找到合適的cathc塊并把該異常對象交給catch塊處理,那這個過程稱為捕獲(catch)異常;如果Java運行時環(huán)境找不到捕獲異常的catch塊,則運行時環(huán)境終止,Java程序也將退出。不管程序代碼塊是否處于try塊中,甚至包括catch塊中代碼,只要執(zhí)行該代碼時出現了異常,系統(tǒng)都會自動生成一個異常對象,如果程序沒有為這段代碼定義任何catch塊,Java運行環(huán)境肯定找不到處理該異常的catch塊,程序肯定在此退出。8.2異常處理9try塊后可以有多個catch塊。try塊后使用多個catch塊是為了針對不同異常類提供的不同的異常處理方式。當系統(tǒng)發(fā)生不同意外情況時,系統(tǒng)會生成不同的異常對象,Java運行時就會根據該異常對象所屬的異常類來決定使用哪個catch塊來處理該異常。通常情況下,如果try塊被執(zhí)行一次,則try塊后只有一個catch塊會被執(zhí)行,絕不可能有多個catch塊被執(zhí)行,除非在循環(huán)中使用continue開始下一次循環(huán),下一次循環(huán)又重新運行了try塊,這才可能導致多個catch塊被執(zhí)行。進行異常捕獲時,一定要記住先捕獲小的異常,再捕獲大的異常。8.2異常處理(3)出現異常示例例1,除數為0的程序異常classDemo{publicintdiv(intx,inty){returnx/y;}}publicclassc1{publicstaticvoidmain(String[]args){Demod=newDemo();intx=d.div(4,0);//0作為除數System.out.println("x="+x);System.out.println("over");}}8.2異常處理程序運行結果:Exceptioninthread"main"java.lang.ArithmeticException:/byzero atDemo.div(c1.java:7) atc1.main(c1.java:13)8.2異常處理程序運行結果:Exceptioninthread"main"java.lang.ArithmeticException:/byzero atDemo.div(c1.java:7) atc1.main(c1.java:13)從上面的結果可以分析出,在第7和第13行都出現了異常,這是因為除法的機制,除數不能為0,這時候運行就拋出了異常。怎么辦呢?就是采取異常處理。例如:8.2異常處理13classDemo{publicintdiv(intx,inty){returnx/y;}}publicclassc1{publicstaticvoidmain(String[]args){Demod=newDemo();try{intx=d.div(4,0);System.out.println("x="+x);}catch(Exceptione){System.out.println("除數有誤");}System.out.println("over"); }}程序運行結果:除數有誤over8.2異常處理14例2,讀不存在的文件時出現異常,并進行了異常處理。importjava.io.FileInputStream;importjava.io.IOException;publicclassc1{publicstaticvoidmain(String[]args){FileInputStreamfis=null;try{fis=newFileInputStream("a.txt");}catch(IOExceptionioe){System.out.println(ioe.getMessage());//return語句強制方法返回return;//使用exit來退出虛擬機//System.exit(1);}finally{//關閉磁盤文件,回收資源if(fis!=null){try{fis.close();}catch(IOExceptionioe){ioe.printStackTrace();}}System.out.println("程序已經執(zhí)行了finally里德資源回收");}}}8.2異常處理程序運行結果:a.txt(系統(tǒng)找不到指定的文件。)程序已經執(zhí)行了finally里德資源回收8.2異常處理16(4)使用throws拋出異常使用throws拋出異常的思路是:當前方法不知道如何處理這種類型的異常,該異常應該由上一級調用者處理,如果main方法也不知道應該如何處理這種類型的異常,也可以使用throws聲明拋出異常,該異常將交給JVM來處理。8.2異常處理importjava.io.FileInputStream;importjava.io.IOException;
publicclassc1{publicstaticvoidmain(String[]args)throwsIOException{test();}publicstaticvoidtest()throwsIOException{FileInputStreamfis=newFileInputStream("a.txt");}}8.2異常處理上面的程序也可以改為:importjava.io.FileInputStream;importjava.io.IOException;publicclassc1{publicstaticvoidtest()throwsIOException{FileInputStreamfis=newFileInputStream("a.txt");}publicstaticvoidmain(String[]args){try{test();}catch(IOExceptione){//TODOAuto-gene
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 贛南醫(yī)學院《英語閱讀與思辨》2023-2024學年第一學期期末試卷
- 七年級語文上冊第二單元6散步教案新人教版
- 七年級道德與法治上冊第四單元生命的思考第八課探問生命第1課時誤區(qū)警示新人教版
- 三年級數學上冊7長方形和正方形第3課時周長導學案新人教版
- 三年級數學上冊第2單元兩三位數乘一位數2.8解決問題課時練冀教版
- 慢性胃炎培訓課件
- 《先芥蒂與麻醉》課件
- 人教版八年級物理下冊全冊教案
- 函數的圖象課件
- 涂料調色完整版本
- 九月主題計劃《 嗨,你好》
- e乙二醇精制車間設備布置圖
- 縣級綜治中心等級評定細則、申報表、負面清單、流程圖
- 行政強制法講座-PPT課件
- 2022年新媒體編輯實戰(zhàn)教程測試題及答案(題庫)
- 崗位現場應急處置方案卡全套(全套20頁)
- 涼席竹片銑槽機(課程設計)
- 高壓線防護搭設方案
- 綜合機械化固體充填采煤技術要求-編制說明
- 十人聯(lián)名推薦表
- 七、分蛋糕博弈
評論
0/150
提交評論