版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
16Java例外處理Java程序設(shè)計(jì)視頻教程16Java例外處理2主要內(nèi)容異常的概念(Exceptions)異常處理自定義異常遞歸16Java例外處理3引例1 PublicclassHelloWorld{2 publicstaticvoidmain(Stringargs[]){3 inti=0;4 Stringgreetings[]={“HelloWorld!”,”Hello!”,5 “HELLOWORLD!!”};6 while(i<4){7 System.out.println(greetings[i]);8 i++;9 }10 }11 }HelloWorld!Hello!HELLOWORLD!!Java.lang.ArrayIndexOutOfBoundsException atHelloWorld.main(HelloWorld.java:7)16Java例外處理4Exception的概念Exception(異常)就是導(dǎo)致程序運(yùn)行時(shí)發(fā)生問題的各種情況。例如:試圖打開的文件不存在網(wǎng)絡(luò)鏈接中斷操作數(shù)越界要加載的類不存在Java中定義了各種異常16Java例外處理5Java中定義的異常類及其繼承結(jié)構(gòu)ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeExceptionIOExceptionEOFExceptionArithmeticExceptionNullPointerException16Java例外處理6異常的分類Error很難恢復(fù)的嚴(yán)重錯(cuò)誤,一般不由程序處理。Exception可處理異常,可以由程序處理的異常,有很多類別,主要有RuntimeException運(yùn)行時(shí)出現(xiàn)的異常,程序可不必檢測。如數(shù)組越界等。IOException輸入輸出異常。在設(shè)計(jì)輸入輸出的程序時(shí),要經(jīng)常用到。其它異常通常是由環(huán)境因素引起的,并且可以被處理的。如文件不存在,無效URL等。16Java例外處理7異常的產(chǎn)生異常的產(chǎn)生有兩種情況由java虛擬機(jī)在執(zhí)行程序時(shí)自動發(fā)現(xiàn)并產(chǎn)生。在程序中用throw命令產(chǎn)生。也稱拋出異常所謂產(chǎn)生異常就是根據(jù)異常的類型,產(chǎn)生一個(gè)異常對象,“拋給”程序處理。因此,所有異常類都是Throwable類的子類。異常對象封裝了異常的信息和一些相關(guān)的處理方法。16Java例外處理8異常處理異常處理的兩種方式
撲獲并處理異常
將方法中產(chǎn)生的異常拋出16Java例外處理9異常處理異常處理有兩種方式撲獲并處理異常在程序中用try-catch-finally結(jié)構(gòu)處理異常。上交異常(轉(zhuǎn)移異常)不處理發(fā)生的異常,而是將方法中產(chǎn)生的異常再拋出,交給調(diào)用該方法的上層方法處理。16Java例外處理10示例:TestExceptionpublicclassTestException{publicstaticvoidmain(String[]args){ intresult=newTest().divide(3,0); System.out.println(“Theresultis“+result);}}classTest{ publicintdivide(intx,inty) { returnx/y; }}運(yùn)行結(jié)果:Exceptioninthread"main"java.lang.ArithmeticException:/byzeroatTest.divide(TestException.java:13)atTestException.main(TestException.java:5)16Java例外處理11異常處理方式之一:
撲獲并處理異常
try…catch語句
try{
可能發(fā)生異常的java語句塊
}catch(ExceptionType1eVariableName1){
處理相應(yīng)異常的java語句塊}catch(ExceptionType2eVariableName2){
處理相應(yīng)異常的java語句塊}...[finally{
語句塊
}]try語句塊后catch語句塊和finally語句塊至少要有一個(gè)。當(dāng)try語句塊中發(fā)生的異常與catch語句的異常類型匹配,控制轉(zhuǎn)到相應(yīng)的catch語句中。無論是否發(fā)生異常,finally語句塊都會被執(zhí)行。try,catch,finally之間不能插入其他語句。異常處理舉例16Java例外處理12publicclassTestException2{publicstaticvoidmain(String[]args){ intresult=newTest().divide(3,0); System.out.println("Theresultis"+result);}}classTest{ publicintdivide(intx,inty) {intz=0;try{ z=x/y; System.out.println("try塊中異常語句后的語句。");// returnz;//即使try中有return語句,finally也會被執(zhí)行。但finally塊后面的語句不會執(zhí)行
}catch(ArithmeticExceptione){System.out.println("捕獲了異常:"+e.getMessage());}finally{System.out.println("進(jìn)入Finally語句塊");}System.out.println("try-catch-finally后的語句");//z=-10;returnz; }}16Java例外處理13多種異常的通用處理16Java例外處理14多種異常的通用處理異常處理可以針對這個(gè)體系中的任意一個(gè)類。葉結(jié)點(diǎn):是具體、專用的異常處理;中間結(jié)點(diǎn):是通用的異常處理??梢蕴幚碓摻Y(jié)點(diǎn)及其子類類型的異常。例:try{...}catch(Exceptione){System.err.println("Exceptioncaught:"+e.getMessage());}16Java例外處理15通用異常處理示例//本例演示異常的父子類關(guān)系,注意父類異常的catch語句應(yīng)該//放在其子類異常catch語句的后面,否則,其子類異常永遠(yuǎn)不會被捕獲。publicclassTestException4{publicstaticvoidmain(String[]args){try{ inta1=Integer.parseInt(args[0]);inta2=Integer.parseInt(args[1]);intresult=a1/a2; System.out.println("Theresultis"+result);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("下標(biāo)越界:"+e.getMessage());}catch(ArithmeticExceptione){System.out.println("除數(shù)為零:"+e.getMessage());}catch(Exceptione)//若Exception的子類被捕獲,則Exception不再會被捕獲
{System.out.println("捕獲了異常:"+e.getMessage());}finally{System.out.println("進(jìn)入Finally語句塊");}}}16Java例外處理16異常處理方式之二:上傳異常將方法可能產(chǎn)生的異常拋出,表明該方法將不處理該異常,調(diào)用該方法的上層方法將負(fù)責(zé)處理異常,或者再將異常上傳。(類似于將麻煩傳給上級)publicvoidtroublesome()throwsIOException{
….. }如果一個(gè)例外在返回到main()(國務(wù)院)時(shí)還未被處理,則程序?qū)⒎钦=K止。16Java例外處理17拋出異常示例//本例演示拋出異常。一段調(diào)用拋出了異常的方法的程序,必須對異常進(jìn)行處理//或者再將異常拋出,否則不能通過編譯。publicclassTestException5{publicstaticvoidmain(String[]args)//throwsException{ intresult=newTest().divide(3,0); System.out.println("Theresultis"+result);}}classTest{ publicintdivide(intx,inty)throwsException { returnx/y; }}16Java例外處理18拋出異常使用throw語句,格式如下:throwsomeThrowableObject例:publicObjectpop()throwsEmptyStackException
{Objectobj;if(size==0)
thrownewEmptyStackException();obj=objectAt(size-1);setObjectAt(size-1,null);size--;returnobj;}拋出異常16Java例外處理19自定義異常我們可以自己定義異常類,自定義異常類是Exception類的子類,可包含普通類的內(nèi)容。例:classDivideByMinusExceptionextendsException{ intdivisor; publicDivideByMinusException(Stringmsg,intdivisor){ super(msg); this.divisor=divisor; } publicintgetDivisor(){ returndivisor; }}16Java例外處理20拋出產(chǎn)生的異常classTest{publicintdivide(intx,inty)throwsDivideByMinusException{if(y<0)
thrownewDivideByMinusException("除數(shù)也不能為負(fù)數(shù)!",y);intresult=x/y;System.out.println("indevide!");returnresult;}}16Java例外處理21捕獲異常并處理publicclassTestDefineException{publicstaticvoidmain(String[]args){try{ intresult=newTest().divide(3,0); System.out.println(
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告服務(wù)咨詢合同范例
- 天津?yàn)I海職業(yè)學(xué)院《衛(wèi)生檢驗(yàn)綜合技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 算法課程設(shè)計(jì)關(guān)于游戲
- 公司設(shè)立協(xié)議合同范例
- 污水管道強(qiáng)修施工方案
- 好朋友一起開店合同范例
- 他人捐款合同范例
- 勞動合同范例長春
- 房產(chǎn)抵押合同范例范例
- 演員經(jīng)紀(jì)約合同范例
- 無領(lǐng)導(dǎo)小組討論案例題目及答案分析
- 多學(xué)科綜合MDT2024年度多學(xué)科綜合MDT工作總結(jié)與計(jì)劃
- 惡性腫瘤患者的心理護(hù)理
- 《現(xiàn)場問題分析》課件
- 北京海淀區(qū)2024屆高三最后一模語文試題含解析
- 天津市南開區(qū)2023-2024學(xué)年四年級上學(xué)期期末語文試卷
- 數(shù)據(jù)中心智能運(yùn)維體系建設(shè)
- 2023年計(jì)劃訂單專員年度總結(jié)及下一年規(guī)劃
- 體質(zhì)測試成績表(自動統(tǒng)計(jì)數(shù)據(jù))(小學(xué)、初中)
- 2022年全國垃圾分類知識競賽試題庫(附含答案與解析)
- 2024版醫(yī)院手術(shù)安全管理學(xué)習(xí)培訓(xùn)課件
評論
0/150
提交評論