




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第七章異常處理基礎(chǔ)篇第1頁,課件共32頁,創(chuàng)作于2023年2月§1.1錯誤處理的方法概述傳統(tǒng)的程序運行時錯誤處理異常處理第2頁,課件共32頁,創(chuàng)作于2023年2月1傳統(tǒng)的程序運行時錯誤處理
如C語言:函數(shù)返回值=某個可能會執(zhí)行失敗的函數(shù)(); if(函數(shù)返回值==表示該函數(shù)執(zhí)行成功的值){正常代碼} elseif(函數(shù)返回值==代表錯誤情況1的值){處理錯誤情形1} elseif(函數(shù)返回值==代表錯誤情況2的值){處理錯誤情形2}
……第3頁,課件共32頁,創(chuàng)作于2023年2月1傳統(tǒng)的程序運行時錯誤處理
函數(shù)返回值=某個可能會執(zhí)行失敗的函數(shù)(); if(函數(shù)返回值!=表示該函數(shù)執(zhí)行成功的值) {Switch(函數(shù)返回值){ case錯誤情況1的值:處理錯誤情形1 case錯誤情況2的值:處理錯誤情形2
……}} else{正常代碼}第4頁,課件共32頁,創(chuàng)作于2023年2月1傳統(tǒng)的程序運行時錯誤處理缺點:1)整個程序代碼穿插錯誤處理代碼,使得條理性和可讀性差;2)對錯誤處理程序難以集中管理,難以保證程序的一致性;3)對于返回值的意義,要借助于文檔,程序維護(hù)困難。第5頁,課件共32頁,創(chuàng)作于2023年2月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è)計者)第6頁,課件共32頁,創(chuàng)作于2023年2月2異常處理特點: 1)可將錯誤處理代碼和常規(guī)代碼隔離開來,提高程序的可讀性和可維護(hù)性; 2)可以處理一組錯誤,進(jìn)行集中管理,保證程序的一致性。3)將異常事件分類,體現(xiàn)了良好的層次性。 第7頁,課件共32頁,創(chuàng)作于2023年2月§1.2Java的異常處理機(jī)制
Java語言用異常為它的程序提供了錯誤處理方式,為方法的異常終止和出錯處理提供了清晰的接口。異常和異常對象異常的處理過程第8頁,課件共32頁,創(chuàng)作于2023年2月1異常和異常對象異常:在程序執(zhí)行的時候,所發(fā)生會打斷程序正常流程的事件。異常的類型 錯誤出現(xiàn)產(chǎn)生異常對象程序的狀態(tài)信息
“異?!北豢醋魇菍ο?,是繼承自類Throwable的子類。所有Throwable的子類所產(chǎn)生的對象實例,都是異常。第9頁,課件共32頁,創(chuàng)作于2023年2月1異常和異常對象異常類的層次
ErrorObjectThrowableExceptionRuntimeExceptionNon_RuntimeException第10頁,課件共32頁,創(chuàng)作于2023年2月1異常和異常對象運行時異常:運行異常可以不做處理,運行時系統(tǒng)會把生成的運行時異常對象交給默認(rèn)的異常處理程序,在標(biāo)準(zhǔn)輸出上顯示異常的內(nèi)容及發(fā)生異常的位置。第11頁,課件共32頁,創(chuàng)作于2023年2月1異常和異常對象ArithmeticException:除0,用0取模;NullPointException:訪問一個空對象中的變量和方法,或一個空數(shù)組中的元素;ClassCastException:把對象o強(qiáng)制成ClassC,而o既不是C的實例,又不是C的子類的實例;NegativeArraySizeException:數(shù)組的長度是負(fù)數(shù);ArrayIndexOutOfBoundsException:訪問數(shù)組中的非法元素。第12頁,課件共32頁,創(chuàng)作于2023年2月1異常和異常對象非運行時異常:非運行異常需要使用try-catch-finally語句捕獲異?;蚴褂胻hrows子句生聲明異常。第13頁,課件共32頁,創(chuàng)作于2023年2月1異常和異常對象IOExceptionFileNotFoundException:找不到文件;InterruptedIOException;UnknownHostException;UnknownServiceException;SocketException;MalformedURLException;NoSuchMethodExceptionClassNotFoundException第14頁,課件共32頁,創(chuàng)作于2023年2月2異常的處理過程拋出異常:產(chǎn)生一個異常對象以及把它轉(zhuǎn)交給運行系統(tǒng)間接拋出(try)直接拋出(throw)捕獲異常(catch):找出異常的合適處理方法,即異常指針的選擇過程處理異常第15頁,課件共32頁,創(chuàng)作于2023年2月2異常的處理過程Java的異常處理機(jī)制由try/catch/finally組成try{//可能會產(chǎn)生異常的程序塊}catch(Exception1){ //異常處理}catch(Exception2){ //異常處理}[finally{ //清除方法狀態(tài)和關(guān)閉文件等語句}]第16頁,課件共32頁,創(chuàng)作于2023年2月2異常的處理過程例1:try{ System.in.read();}catch(IOExceptione){ Stringerr=e.getMessage(); System.out.println(err); }第17頁,課件共32頁,創(chuàng)作于2023年2月//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;}}第18頁,課件共32頁,創(chuàng)作于2023年2月第19頁,課件共32頁,創(chuàng)作于2023年2月//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;}}第20頁,課件共32頁,創(chuàng)作于2023年2月第21頁,課件共32頁,創(chuàng)作于2023年2月2異常的處理過程--聲明異常例2:聲明異常ProtectedvoidmyMethod(){try{ doRead();}catch(IOExceptione){ System.out.println(e.getMessage());}}ProtectedvoiddoRead()throwsIOException{ System.in.read();}第22頁,課件共32頁,創(chuàng)作于2023年2月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”);}第23頁,課件共32頁,創(chuàng)作于2023年2月2異常的處理過程Throw語句會使得一個異常被拋擲,其結(jié)果將導(dǎo)致程序控制的轉(zhuǎn)換,即轉(zhuǎn)向處理異常的catch塊。形式: thrownewException(“描述字符串”);Throws是將本方法產(chǎn)生的異常不處理,而是拋給上層調(diào)用者。第24頁,課件共32頁,創(chuàng)作于2023年2月§1.3創(chuàng)建自己的異常類創(chuàng)建自己的異常類 繼承Exception及其子類,多數(shù)情況下為非運行時異常。如 classMyExceptionextendsException{
… Stringsay(){…} }在程序中使用自己的異常類 classUseMyException{
…try{thrownewMyException(); }catch(MyExceptione){System.out.println(e.say()); } } 第25頁,課件共32頁,創(chuàng)作于2023年2月小結(jié)JAVA異常處理機(jī)制及處理過程異常處理與程序的結(jié)合使用異常,運行時異常,非運行時異常,Error,try-catch-finally,throw,throws第26頁,課件共32頁,創(chuàng)作于2023年2月習(xí)題解釋JAVA異常處理機(jī)制及處理過程解釋異常,運行時異常,非運行時異常第27頁,課件共32頁,創(chuàng)作于2023年2月UsingExceptions.javapublicclassUsingExceptions{publicstaticvoidmain(Stringargs[]){try{method1();}catch(Exceptione){System.err.println(e.getMessage()+"\n");}}publicstaticvoidmethod1()throwsException{method2();}publicstaticvoidmethod2()throwsException{method3();}publicstaticvoidmethod3()throwsException{thrownewException("Exceptionthrowninmethod3");}}第28頁,課件共32頁,創(chuàng)作于2023年2月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");}}}第29頁,課件共32頁,創(chuàng)作于2023年2月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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京鏈家購房合同范本
- 產(chǎn)品攝影廣告合同范例
- 劇目買斷合同范本
- 融資收費合同范本
- 勞動合同范本解除
- 單位車輛外包服務(wù)合同范本
- 分期出租房合同范本
- 醫(yī)療服務(wù)協(xié)議合同范本
- 單位招聘保安合同范本
- 分項付款合同范本
- PySide學(xué)習(xí)教程
- 數(shù)據(jù)結(jié)構(gòu)英文教學(xué)課件:chapter1 Introduction
- 人教三年級數(shù)學(xué)下冊表格式全冊
- 事業(yè)單位綜合基礎(chǔ)知識考試題庫 綜合基礎(chǔ)知識考試題庫.doc
- 優(yōu)秀教研組評比制度及實施細(xì)則
- 譯林初中英語教材目錄
- 物業(yè)交付后工程維修工作機(jī)制
- 農(nóng)作物病蟲害專業(yè)化統(tǒng)防統(tǒng)治管理辦法
- JJF 1752-2019全自動封閉型發(fā)光免疫分析儀校準(zhǔn)規(guī)范(高清版)
- GB 1886.300-2018 食品安全國家標(biāo)準(zhǔn) 食品添加劑 離子交換樹脂(高清版)
- 食品經(jīng)營單位經(jīng)營場所和設(shè)備布局、操作流程示意圖模板
評論
0/150
提交評論