《Java程序設(shè)計(jì)及移動(dòng)APP開發(fā)》課件-第08章_第1頁
《Java程序設(shè)計(jì)及移動(dòng)APP開發(fā)》課件-第08章_第2頁
《Java程序設(shè)計(jì)及移動(dòng)APP開發(fā)》課件-第08章_第3頁
《Java程序設(shè)計(jì)及移動(dòng)APP開發(fā)》課件-第08章_第4頁
《Java程序設(shè)計(jì)及移動(dòng)APP開發(fā)》課件-第08章_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章Java中的異常處理機(jī)制0102038.1異常的含義及分類8.2異常處理8.3思考和練習(xí)(1)異常的含義所謂異常,就是程序運(yùn)行過程中出現(xiàn)的一些錯(cuò)誤。當(dāng)然,這些錯(cuò)誤不是程序的語法錯(cuò)誤,異常與我們平時(shí)編寫程序出現(xiàn)的語法錯(cuò)誤是兩碼事。例如,做除法時(shí)除數(shù)為零的情況,還比如打開一個(gè)不存在的文件或者數(shù)據(jù)庫。異常處理將會(huì)無形中改變程序的控制流程,目的是讓程序有機(jī)會(huì)來對(duì)出現(xiàn)的錯(cuò)誤做出響應(yīng)。(2)異常的分類Java中異常是一個(gè)對(duì)象,繼承于Throwable這個(gè)類,所有的Throwable類的繼承類所產(chǎn)生的對(duì)象都是異常(有時(shí)也稱為例外)。從Throwable類派生出的異常類有Exception(異常)和Error(錯(cuò)誤)。8.1異常的含義及分類3Throwable父類和Exception(異常)和Error(錯(cuò)誤)的關(guān)系結(jié)構(gòu)如下:Throwable

//父類(下面兩個(gè)類相同的共性抽取出來的)

|--Error

|--Excption

//兩個(gè)子類(里面定義了很多問題(異常出現(xiàn)))

Error(錯(cuò)誤):一般是指Java虛擬機(jī)相關(guān)的問題,如系統(tǒng)崩潰、虛擬機(jī)出錯(cuò)誤、動(dòng)態(tài)鏈接失敗等,這種錯(cuò)誤無法恢復(fù)或不可能捕獲,將導(dǎo)致應(yīng)用程序中斷,通常應(yīng)用程序無法處理這些錯(cuò)誤,因此應(yīng)用程序不應(yīng)該捕獲Error對(duì)象,也無須在其throws子句中聲明該方法拋出任何Error或其子類。8.1異常的含義及分類Exception(異常):Exception

類及其子類是

Throwable

的一種形式,它指出了合理的應(yīng)用程序想要捕獲的條件:SQLException:該異常提供關(guān)于數(shù)據(jù)庫訪問錯(cuò)誤或其他錯(cuò)誤的信息。RuntimeException

:是那些可能在Java虛擬機(jī)正常運(yùn)行期間拋出的異常的超類。IOException:此類為異常的通用類,它是由失敗的或中斷的I/O操作生成的。8.1異常的含義及分類5Throwable():Throwable

類是Java語言中所有錯(cuò)誤或異常的超類。只有當(dāng)對(duì)象是此類(或其子類之一)的實(shí)例時(shí),才能通過Java虛擬機(jī)或者Java

throw

語句拋出。類似地,只有此類或其子類之一才可以是

catch

子句中的參數(shù)類型。異常對(duì)象包含的常用方法:getMessage():返回該異常的詳細(xì)描述字符printStackTrace():將該異常的跟蹤棧信息輸出到標(biāo)準(zhǔn)錯(cuò)誤輸出。printStackTrace(PrintStreams):將該異常的跟蹤棧信息輸出

到指定的輸出流。getStackTrace():返回該異常的跟蹤棧信息。8.1異常的含義及分類(1)處理語句Java異常機(jī)制主要依賴于try、catch、finally、throw、throws五個(gè)關(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{一定會(huì)執(zhí)行的代碼;(處理方式)}8.2異常處理7try:它里面放置可能引發(fā)異常的代碼catch:后面對(duì)應(yīng)異常類型和一個(gè)代碼塊,用于表明該catch塊用于處理這種類型異常的代碼塊,可以有多個(gè)catch塊。finally:主要用于回收在try塊里打開的資源(如數(shù)據(jù)庫連接、網(wǎng)絡(luò)連接和磁盤文件),異常機(jī)制總是保證finally塊總是被執(zhí)行。只有finally塊,執(zhí)行完成之后,才會(huì)回來執(zhí)行try或者catch塊中的return或者throw語句,如果finally中使用了return或者

throw等終止方法的語句,則就不會(huì)跳回執(zhí)行,直接停止。throw:用于拋出一個(gè)實(shí)際的異常,可以單獨(dú)作為語句使用,拋出一個(gè)具體的異常對(duì)象。throws:用在方法簽名中,用于聲明該方法可能拋出的異常。8.2異常處理(2)執(zhí)行步驟:如果執(zhí)行try塊中的業(yè)務(wù)邏輯代碼時(shí)出現(xiàn)異常,系統(tǒng)自動(dòng)生成一個(gè)異常對(duì)象,該異常對(duì)象被提交給Java運(yùn)行環(huán)境,這個(gè)過程稱為拋出(throw)異常。當(dāng)Java運(yùn)行環(huán)境收到異常對(duì)象時(shí),會(huì)尋找能處理該異常對(duì)象的catch塊,如果找到合適的cathc塊并把該異常對(duì)象交給catch塊處理,那這個(gè)過程稱為捕獲(catch)異常;如果Java運(yùn)行時(shí)環(huán)境找不到捕獲異常的catch塊,則運(yùn)行時(shí)環(huán)境終止,Java程序也將退出。不管程序代碼塊是否處于try塊中,甚至包括catch塊中代碼,只要執(zhí)行該代碼時(shí)出現(xiàn)了異常,系統(tǒng)都會(huì)自動(dòng)生成一個(gè)異常對(duì)象,如果程序沒有為這段代碼定義任何catch塊,Java運(yùn)行環(huán)境肯定找不到處理該異常的catch塊,程序肯定在此退出。8.2異常處理9try塊后可以有多個(gè)catch塊。try塊后使用多個(gè)catch塊是為了針對(duì)不同異常類提供的不同的異常處理方式。當(dāng)系統(tǒng)發(fā)生不同意外情況時(shí),系統(tǒng)會(huì)生成不同的異常對(duì)象,Java運(yùn)行時(shí)就會(huì)根據(jù)該異常對(duì)象所屬的異常類來決定使用哪個(gè)catch塊來處理該異常。通常情況下,如果try塊被執(zhí)行一次,則try塊后只有一個(gè)catch塊會(huì)被執(zhí)行,絕不可能有多個(gè)catch塊被執(zhí)行,除非在循環(huán)中使用continue開始下一次循環(huán),下一次循環(huán)又重新運(yùn)行了try塊,這才可能導(dǎo)致多個(gè)catch塊被執(zhí)行。進(jìn)行異常捕獲時(shí),一定要記住先捕獲小的異常,再捕獲大的異常。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,這時(shí)候運(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,讀不存在的文件時(shí)出現(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)該由上一級(jí)調(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論