




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第8章Java中的異常處理機(jī)制0102038.1異常的含義及分類8.2異常處理8.3思考和練習(xí)(1)異常的含義所謂異常,就是程序運(yùn)行過程中出現(xiàn)的一些錯誤。當(dāng)然,這些錯誤不是程序的語法錯誤,異常與我們平時編寫程序出現(xiàn)的語法錯誤是兩碼事。例如,做除法時除數(shù)為零的情況,還比如打開一個不存在的文件或者數(shù)據(jù)庫。異常處理將會無形中改變程序的控制流程,目的是讓程序有機(jī)會來對出現(xiàn)的錯誤做出響應(yīng)。(2)異常的分類Java中異常是一個對象,繼承于Throwable這個類,所有的Throwable類的繼承類所產(chǎn)生的對象都是異常(有時也稱為例外)。從Throwable類派生出的異常類有Exception(異常)和Error(錯誤)。8.1異常的含義及分類3Throwable父類和Exception(異常)和Error(錯誤)的關(guān)系結(jié)構(gòu)如下:Throwable
//父類(下面兩個類相同的共性抽取出來的)
|--Error
|--Excption
//兩個子類(里面定義了很多問題(異常出現(xiàn)))
Error(錯誤):一般是指Java虛擬機(jī)相關(guān)的問題,如系統(tǒng)崩潰、虛擬機(jī)出錯誤、動態(tài)鏈接失敗等,這種錯誤無法恢復(fù)或不可能捕獲,將導(dǎo)致應(yīng)用程序中斷,通常應(yīng)用程序無法處理這些錯誤,因此應(yīng)用程序不應(yīng)該捕獲Error對象,也無須在其throws子句中聲明該方法拋出任何Error或其子類。8.1異常的含義及分類Exception(異常):Exception
類及其子類是
Throwable
的一種形式,它指出了合理的應(yīng)用程序想要捕獲的條件:SQLException:該異常提供關(guān)于數(shù)據(jù)庫訪問錯誤或其他錯誤的信息。RuntimeException
:是那些可能在Java虛擬機(jī)正常運(yùn)行期間拋出的異常的超類。IOException:此類為異常的通用類,它是由失敗的或中斷的I/O操作生成的。8.1異常的含義及分類5Throwable():Throwable
類是Java語言中所有錯誤或異常的超類。只有當(dāng)對象是此類(或其子類之一)的實(shí)例時,才能通過Java虛擬機(jī)或者Java
throw
語句拋出。類似地,只有此類或其子類之一才可以是
catch
子句中的參數(shù)類型。異常對象包含的常用方法:getMessage():返回該異常的詳細(xì)描述字符printStackTrace():將該異常的跟蹤棧信息輸出到標(biāo)準(zhǔn)錯誤輸出。printStackTrace(PrintStreams):將該異常的跟蹤棧信息輸出
到指定的輸出流。getStackTrace():返回該異常的跟蹤棧信息。8.1異常的含義及分類(1)處理語句Java異常機(jī)制主要依賴于try、catch、finally、throw、throws五個關(guān)鍵字。try--catch結(jié)構(gòu)是異常處理最基本的結(jié)構(gòu)。在這種結(jié)構(gòu)中,可能引發(fā)的異常語句封裝在try程序體中,而處理異常的相應(yīng)語句封裝在catch程序體中。try--catch結(jié)構(gòu)格式如下:try{
需要被檢測的代碼;}catch{處理異常的代碼;(處理方式)}finally{一定會執(zhí)行的代碼;(處理方式)}8.2異常處理7try:它里面放置可能引發(fā)異常的代碼catch:后面對應(yīng)異常類型和一個代碼塊,用于表明該catch塊用于處理這種類型異常的代碼塊,可以有多個catch塊。finally:主要用于回收在try塊里打開的資源(如數(shù)據(jù)庫連接、網(wǎng)絡(luò)連接和磁盤文件),異常機(jī)制總是保證finally塊總是被執(zhí)行。只有finally塊,執(zhí)行完成之后,才會回來執(zhí)行try或者catch塊中的return或者throw語句,如果finally中使用了return或者
throw等終止方法的語句,則就不會跳回執(zhí)行,直接停止。throw:用于拋出一個實(shí)際的異常,可以單獨(dú)作為語句使用,拋出一個具體的異常對象。throws:用在方法簽名中,用于聲明該方法可能拋出的異常。8.2異常處理(2)執(zhí)行步驟:如果執(zhí)行try塊中的業(yè)務(wù)邏輯代碼時出現(xiàn)異常,系統(tǒng)自動生成一個異常對象,該異常對象被提交給Java運(yùn)行環(huán)境,這個過程稱為拋出(throw)異常。當(dāng)Java運(yùn)行環(huán)境收到異常對象時,會尋找能處理該異常對象的catch塊,如果找到合適的cathc塊并把該異常對象交給catch塊處理,那這個過程稱為捕獲(catch)異常;如果Java運(yùn)行時環(huán)境找不到捕獲異常的catch塊,則運(yùn)行時環(huán)境終止,Java程序也將退出。不管程序代碼塊是否處于try塊中,甚至包括catch塊中代碼,只要執(zhí)行該代碼時出現(xiàn)了異常,系統(tǒng)都會自動生成一個異常對象,如果程序沒有為這段代碼定義任何catch塊,Java運(yùn)行環(huán)境肯定找不到處理該異常的catch塊,程序肯定在此退出。8.2異常處理9try塊后可以有多個catch塊。try塊后使用多個catch塊是為了針對不同異常類提供的不同的異常處理方式。當(dāng)系統(tǒng)發(fā)生不同意外情況時,系統(tǒng)會生成不同的異常對象,Java運(yùn)行時就會根據(jù)該異常對象所屬的異常類來決定使用哪個catch塊來處理該異常。通常情況下,如果try塊被執(zhí)行一次,則try塊后只有一個catch塊會被執(zhí)行,絕不可能有多個catch塊被執(zhí)行,除非在循環(huán)中使用continue開始下一次循環(huán),下一次循環(huán)又重新運(yùn)行了try塊,這才可能導(dǎo)致多個catch塊被執(zhí)行。進(jìn)行異常捕獲時,一定要記住先捕獲小的異常,再捕獲大的異常。8.2異常處理(3)出現(xiàn)異常示例例1,除數(shù)為0的程序異常classDemo{publicintdiv(intx,inty){returnx/y;}}publicclassc1{publicstaticvoidmain(String[]args){Demod=newDemo();intx=d.div(4,0);//0作為除數(shù)System.out.println("x="+x);System.out.println("over");}}8.2異常處理程序運(yùn)行結(jié)果:Exceptioninthread"main"java.lang.ArithmeticException:/byzero atDemo.div(c1.java:7) atc1.main(c1.java:13)8.2異常處理程序運(yùn)行結(jié)果:Exceptioninthread"main"java.lang.ArithmeticException:/byzero atDemo.div(c1.java:7) atc1.main(c1.java:13)從上面的結(jié)果可以分析出,在第7和第13行都出現(xiàn)了異常,這是因?yàn)槌ǖ臋C(jī)制,除數(shù)不能為0,這時候運(yùn)行就拋出了異常。怎么辦呢?就是采取異常處理。例如: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("除數(shù)有誤");}System.out.println("over"); }}程序運(yùn)行結(jié)果:除數(shù)有誤over8.2異常處理14例2,讀不存在的文件時出現(xiàn)異常,并進(jìn)行了異常處理。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語句強(qiáng)制方法返回return;//使用exit來退出虛擬機(jī)//System.exit(1);}finally{//關(guān)閉磁盤文件,回收資源if(fis!=null){try{fis.close();}catch(IOExceptionioe){ioe.printStackTrace();}}System.out.println("程序已經(jīng)執(zhí)行了finally里德資源回收");}}}8.2異常處理程序運(yùn)行結(jié)果:a.txt(系統(tǒng)找不到指定的文件。)程序已經(jīng)執(zhí)行了finally里德資源回收8.2異常處理16(4)使用throws拋出異常使用throws拋出異常的思路是:當(dāng)前方法不知道如何處理這種類型的異常,該異常應(yīng)該由上一級調(diào)用者處理,如果main方法也不知道應(yīng)該如何處理這種類型的異常,也可以使用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)系上傳者。文件的所有權(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 氧化石與納米親水二氧化硅在流變性和攜砂能力中的作用研究
- 安全施工方案
- 智能時代個人信息保護(hù)自律機(jī)制構(gòu)建研究
- 基于PLC的機(jī)床電氣控制設(shè)計(jì)原理與應(yīng)用實(shí)例
- 聽覺視角下的文學(xué)作品深度解讀
- 構(gòu)建學(xué)習(xí)型社會:教育關(guān)系重構(gòu)與創(chuàng)新路徑探索
- 公務(wù)接待相關(guān)管理辦法
- 安全生產(chǎn)十四五
- 新媒體環(huán)境下播音主持話語表達(dá)的創(chuàng)新范式研究
- 儲運(yùn)部工作總結(jié)
- 2025至2030中國中小型風(fēng)電行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 六大茶類培訓(xùn)
- 2025-2030中國油田化學(xué)品行業(yè)市場深度調(diào)研及行情監(jiān)測與投資前景研究報(bào)告
- 2025年烏魯木齊危險(xiǎn)品駕駛員模擬試題
- 2025至2030中國質(zhì)子束治療系統(tǒng)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報(bào)告
- 自主招生面試題及答案
- 深基坑監(jiān)測管理制度
- 2025年甘肅省民航機(jī)場集團(tuán)校園招聘45人筆試參考題庫帶答案詳解
- 2025年高考真題-英語(全國一卷) 含答案
- 統(tǒng)編版高中政治必修三《政治與法治》期末復(fù)習(xí):選擇題刷題練習(xí)題(含答案解析)
評論
0/150
提交評論