版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第七章異常處理基礎(chǔ)篇第一頁,共三十二頁,編輯于2023年,星期四§1.1錯誤處理的方法概述傳統(tǒng)的程序運(yùn)行時錯誤處理異常處理第二頁,共三十二頁,編輯于2023年,星期四1傳統(tǒng)的程序運(yùn)行時錯誤處理
如C語言:函數(shù)返回值=某個可能會執(zhí)行失敗的函數(shù)(); if(函數(shù)返回值==表示該函數(shù)執(zhí)行成功的值){正常代碼} elseif(函數(shù)返回值==代表錯誤情況1的值){處理錯誤情形1} elseif(函數(shù)返回值==代表錯誤情況2的值){處理錯誤情形2}
……第三頁,共三十二頁,編輯于2023年,星期四1傳統(tǒng)的程序運(yùn)行時錯誤處理
函數(shù)返回值=某個可能會執(zhí)行失敗的函數(shù)(); if(函數(shù)返回值!=表示該函數(shù)執(zhí)行成功的值) {Switch(函數(shù)返回值){ case錯誤情況1的值:處理錯誤情形1 case錯誤情況2的值:處理錯誤情形2
……}} else{正常代碼}第四頁,共三十二頁,編輯于2023年,星期四1傳統(tǒng)的程序運(yùn)行時錯誤處理缺點(diǎn):1)整個程序代碼穿插錯誤處理代碼,使得條理性和可讀性差;2)對錯誤處理程序難以集中管理,難以保證程序的一致性;3)對于返回值的意義,要借助于文檔,程序維護(hù)困難。第五頁,共三十二頁,編輯于2023年,星期四2異常處理如C++,JAVA語言:就是在異常發(fā)生時,由編程語言提供的某種機(jī)制通知應(yīng)用程序,讓應(yīng)用程序決定如何進(jìn)行下一步的處理。 傳統(tǒng)方式:1)負(fù)責(zé)測出錯誤的發(fā)生(程序設(shè)計者)2)進(jìn)行錯誤的處理 異常處理方式:2)進(jìn)行錯誤的處理(程序設(shè)計者)第六頁,共三十二頁,編輯于2023年,星期四2異常處理特點(diǎn): 1)可將錯誤處理代碼和常規(guī)代碼隔離開來,提高程序的可讀性和可維護(hù)性; 2)可以處理一組錯誤,進(jìn)行集中管理,保證程序的一致性。3)將異常事件分類,體現(xiàn)了良好的層次性。 第七頁,共三十二頁,編輯于2023年,星期四§1.2Java的異常處理機(jī)制
Java語言用異常為它的程序提供了錯誤處理方式,為方法的異常終止和出錯處理提供了清晰的接口。異常和異常對象異常的處理過程第八頁,共三十二頁,編輯于2023年,星期四1異常和異常對象異常:在程序執(zhí)行的時候,所發(fā)生會打斷程序正常流程的事件。異常的類型 錯誤出現(xiàn)產(chǎn)生異常對象程序的狀態(tài)信息
“異?!北豢醋魇菍ο?,是繼承自類Throwable的子類。所有Throwable的子類所產(chǎn)生的對象實(shí)例,都是異常。第九頁,共三十二頁,編輯于2023年,星期四1異常和異常對象異常類的層次
ErrorObjectThrowableExceptionRuntimeExceptionNon_RuntimeException第十頁,共三十二頁,編輯于2023年,星期四1異常和異常對象運(yùn)行時異常:運(yùn)行異常可以不做處理,運(yùn)行時系統(tǒng)會把生成的運(yùn)行時異常對象交給默認(rèn)的異常處理程序,在標(biāo)準(zhǔn)輸出上顯示異常的內(nèi)容及發(fā)生異常的位置。第十一頁,共三十二頁,編輯于2023年,星期四1異常和異常對象ArithmeticException:除0,用0取模;NullPointException:訪問一個空對象中的變量和方法,或一個空數(shù)組中的元素;ClassCastException:把對象o強(qiáng)制成ClassC,而o既不是C的實(shí)例,又不是C的子類的實(shí)例;NegativeArraySizeException:數(shù)組的長度是負(fù)數(shù);ArrayIndexOutOfBoundsException:訪問數(shù)組中的非法元素。第十二頁,共三十二頁,編輯于2023年,星期四1異常和異常對象非運(yùn)行時異常:非運(yùn)行異常需要使用try-catch-finally語句捕獲異常或使用throws子句生聲明異常。第十三頁,共三十二頁,編輯于2023年,星期四1異常和異常對象IOExceptionFileNotFoundException:找不到文件;InterruptedIOException;UnknownHostException;UnknownServiceException;SocketException;MalformedURLException;NoSuchMethodExceptionClassNotFoundException第十四頁,共三十二頁,編輯于2023年,星期四2異常的處理過程拋出異常:產(chǎn)生一個異常對象以及把它轉(zhuǎn)交給運(yùn)行系統(tǒng)間接拋出(try)直接拋出(throw)捕獲異常(catch):找出異常的合適處理方法,即異常指針的選擇過程處理異常第十五頁,共三十二頁,編輯于2023年,星期四2異常的處理過程Java的異常處理機(jī)制由try/catch/finally組成try{//可能會產(chǎn)生異常的程序塊}catch(Exception1){ //異常處理}catch(Exception2){ //異常處理}[finally{ //清除方法狀態(tài)和關(guān)閉文件等語句}]第十六頁,共三十二頁,編輯于2023年,星期四2異常的處理過程例1:try{ System.in.read();}catch(IOExceptione){ Stringerr=e.getMessage(); System.out.println(err); }第十七頁,共三十二頁,編輯于2023年,星期四//BubbleSort1.javapublicclassBubbleSort1{publicstaticvoidmain(Stringargs[]){inta[]=newint[10];for(inti=0;i<10;i++)a[i]=(int)(Math.random()*100);for(inti=0;i<a.length;i++)System.out.print(a[i]+"");System.out.println();bubbleSort(a);System.out.println("Dataitemsinascendingorder");for(inti=0;i<a.length;i++)System.out.print(a[i]+"");}publicstaticvoidbubbleSort(intb[]){for(intpass=b.length-1;pass>0;pass--){for(inti=0;i<pass;i++)if(b[i]>b[i+2])swap(b,i,i+1);}}publicstaticvoidswap(intc[],intfirst,intsecond){inthold;hold=c[first];c[first]=c[second];c[second]=hold;}}第十八頁,共三十二頁,編輯于2023年,星期四第十九頁,共三十二頁,編輯于2023年,星期四//BubbleSort2.javapublicclassBubbleSort2{publicstaticvoidmain(Stringargs[]){inta[]=newint[10];for(inti=0;i<10;i++)a[i]=(int)(Math.random()*100);for(inti=0;i<a.length;i++)System.out.print(a[i]+"");System.out.println();bubbleSort(a);System.out.println("Dataitemsinascendingorder");for(inti=0;i<a.length;i++)System.out.print(a[i]+"");}publicstaticvoidbubbleSort(intb[]){
try{for(intpass=b.length-1;pass>0;pass--){for(inti=0;i<pass;i++)if(b[i]>b[i+2])swap(b,i,i+1);}
}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("出現(xiàn)數(shù)組越界異常:"+e.getMessage());}}
publicstaticvoidswap(intc[],intfirst,intsecond){inthold;hold=c[first];c[first]=c[second];c[second]=hold;}}第二十頁,共三十二頁,編輯于2023年,星期四第二十一頁,共三十二頁,編輯于2023年,星期四2異常的處理過程--聲明異常例2:聲明異常ProtectedvoidmyMethod(){try{ doRead();}catch(IOExceptione){ System.out.println(e.getMessage());}}ProtectedvoiddoRead()throwsIOException{ System.in.read();}第二十二頁,共三十二頁,編輯于2023年,星期四2異常的處理過程—拋出異常例3:Publicstaticvoidmain(String[]args){try{System.out.pringtln(passingGrade(90,80));}catch(Exceptione){ System.out.println(e.getMessage());}}StaticvoidpassingGrade(intcorrect,inttotal)throwsException{if(correct>total)
thrownewException(“Invalidvalues”);}第二十三頁,共三十二頁,編輯于2023年,星期四2異常的處理過程Throw語句會使得一個異常被拋擲,其結(jié)果將導(dǎo)致程序控制的轉(zhuǎn)換,即轉(zhuǎn)向處理異常的catch塊。形式: thrownewException(“描述字符串”);Throws是將本方法產(chǎn)生的異常不處理,而是拋給上層調(diào)用者。第二十四頁,共三十二頁,編輯于2023年,星期四§1.3創(chuàng)建自己的異常類創(chuàng)建自己的異常類 繼承Exception及其子類,多數(shù)情況下為非運(yùn)行時異常。如 classMyExceptionextendsException{
… Stringsay(){…} }在程序中使用自己的異常類 classUseMyException{
…try{thrownewMyException(); }catch(MyExceptione){System.out.println(e.say()); } } 第二十五頁,共三十二頁,編輯于2023年,星期四小結(jié)JAVA異常處理機(jī)制及處理過程異常處理與程序的結(jié)合使用異常,運(yùn)行時異常,非運(yùn)行時異常,Error,try-catch-finally,throw,throws第二十六頁,共三十二頁,編輯于2023年,星期四習(xí)題解釋JAVA異常處理機(jī)制及處理過程解釋異常,運(yùn)行時異常,非運(yùn)行時異常第二十七頁,共三十二頁,編輯于2023年,星期四UsingExceptions.javapublicclassUsingExceptions{publicstaticvoidmain(Stringargs[]){try{method1();}catch(Exceptione){System.err.println(e.getMessage()+"\n");}}publicstaticvoidmethod1()throwsException{method2();}publicstaticvoidmethod2()throwsException{method3();}publicstaticvoidmethod3()throwsException{thrownewException("Exceptionthrowninmethod3");}}第二十八頁,共三十二頁,編輯于2023年,星期四UsingExceptions.javapublicclassUsingExceptions{publicstaticvoidmain(Stringargs[]){ try{throwException();}catch(Exceptione){System.err.println("Exceptionhandledinmain");}}publicstaticvoidthrowException()throwsException{try{System.out.println("MethodthrowException");thrownewException();}catch(RuntimeExceptione){System.err.println("Exceptionhandledin"+"methodthrowException");}finally{System.err.println("Finallyisalwaysexecuted");}}}第二十九頁,共三十二頁,編輯于2023年,星期四UsingExceptionsclassDivideByZeroExceptionextendsArithmeticException{publicDivideByZeroException(){
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)生作業(yè)量調(diào)查數(shù)據(jù)分析報告
- 年度企業(yè)財務(wù)分析報告模板
- 舟山船舶行業(yè)歷史分析報告
- 國產(chǎn)水空調(diào)行業(yè)前景分析報告
- 淘寶數(shù)據(jù)分析行業(yè)現(xiàn)狀報告
- 證券行業(yè)營銷流程分析報告
- 輪胎裝備行業(yè)前景分析報告
- GB/T 46920-2025基于12.5 kHz信道的時分多址(TDMA)專用數(shù)字集群通信系統(tǒng)安全技術(shù)要求
- 鄉(xiāng)衛(wèi)生院門診收費(fèi)制度
- 每日打掃衛(wèi)生制度
- 2026年無錫工藝職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫帶答案解析
- 【低空經(jīng)濟(jì)】無人機(jī)AI巡檢系統(tǒng)設(shè)計方案
- 2026年齊齊哈爾高等師范專科學(xué)校單招職業(yè)技能測試模擬測試卷必考題
- 初中生物教師培訓(xùn)課件
- 2025年湖南省公務(wù)員錄用考試錄用考試《申論》標(biāo)準(zhǔn)試卷及答案
- 漢字的傳播教學(xué)課件
- 行政崗位面試問題庫及應(yīng)對策略
- 2025衢州市市級機(jī)關(guān)事業(yè)單位編外招聘77人筆試試題附答案解析
- 2025年中信金融業(yè)務(wù)面試題庫及答案
- 《化肥產(chǎn)品生產(chǎn)許可證實(shí)施細(xì)則(一)》(復(fù)肥產(chǎn)品部分)
- 零碳園區(qū)數(shù)字化建筑設(shè)計方案
評論
0/150
提交評論