第七章 異常處理基礎(chǔ)篇_第1頁(yè)
第七章 異常處理基礎(chǔ)篇_第2頁(yè)
第七章 異常處理基礎(chǔ)篇_第3頁(yè)
第七章 異常處理基礎(chǔ)篇_第4頁(yè)
第七章 異常處理基礎(chǔ)篇_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第七章異常處理基礎(chǔ)篇第1頁(yè),共32頁(yè),2023年,2月20日,星期三§1.1錯(cuò)誤處理的方法概述傳統(tǒng)的程序運(yùn)行時(shí)錯(cuò)誤處理異常處理第2頁(yè),共32頁(yè),2023年,2月20日,星期三1傳統(tǒng)的程序運(yùn)行時(shí)錯(cuò)誤處理

如C語(yǔ)言:函數(shù)返回值=某個(gè)可能會(huì)執(zhí)行失敗的函數(shù)(); if(函數(shù)返回值==表示該函數(shù)執(zhí)行成功的值){正常代碼} elseif(函數(shù)返回值==代表錯(cuò)誤情況1的值){處理錯(cuò)誤情形1} elseif(函數(shù)返回值==代表錯(cuò)誤情況2的值){處理錯(cuò)誤情形2}

……第3頁(yè),共32頁(yè),2023年,2月20日,星期三1傳統(tǒng)的程序運(yùn)行時(shí)錯(cuò)誤處理

函數(shù)返回值=某個(gè)可能會(huì)執(zhí)行失敗的函數(shù)(); if(函數(shù)返回值!=表示該函數(shù)執(zhí)行成功的值) {Switch(函數(shù)返回值){ case錯(cuò)誤情況1的值:處理錯(cuò)誤情形1 case錯(cuò)誤情況2的值:處理錯(cuò)誤情形2

……}} else{正常代碼}第4頁(yè),共32頁(yè),2023年,2月20日,星期三1傳統(tǒng)的程序運(yùn)行時(shí)錯(cuò)誤處理缺點(diǎn):1)整個(gè)程序代碼穿插錯(cuò)誤處理代碼,使得條理性和可讀性差;2)對(duì)錯(cuò)誤處理程序難以集中管理,難以保證程序的一致性;3)對(duì)于返回值的意義,要借助于文檔,程序維護(hù)困難。第5頁(yè),共32頁(yè),2023年,2月20日,星期三2異常處理如C++,JAVA語(yǔ)言:就是在異常發(fā)生時(shí),由編程語(yǔ)言提供的某種機(jī)制通知應(yīng)用程序,讓?xiě)?yīng)用程序決定如何進(jìn)行下一步的處理。 傳統(tǒng)方式:1)負(fù)責(zé)測(cè)出錯(cuò)誤的發(fā)生(程序設(shè)計(jì)者)2)進(jìn)行錯(cuò)誤的處理 異常處理方式:2)進(jìn)行錯(cuò)誤的處理(程序設(shè)計(jì)者)第6頁(yè),共32頁(yè),2023年,2月20日,星期三2異常處理特點(diǎn): 1)可將錯(cuò)誤處理代碼和常規(guī)代碼隔離開(kāi)來(lái),提高程序的可讀性和可維護(hù)性; 2)可以處理一組錯(cuò)誤,進(jìn)行集中管理,保證程序的一致性。3)將異常事件分類,體現(xiàn)了良好的層次性。 第7頁(yè),共32頁(yè),2023年,2月20日,星期三§1.2Java的異常處理機(jī)制

Java語(yǔ)言用異常為它的程序提供了錯(cuò)誤處理方式,為方法的異常終止和出錯(cuò)處理提供了清晰的接口。異常和異常對(duì)象異常的處理過(guò)程第8頁(yè),共32頁(yè),2023年,2月20日,星期三1異常和異常對(duì)象異常:在程序執(zhí)行的時(shí)候,所發(fā)生會(huì)打斷程序正常流程的事件。異常的類型 錯(cuò)誤出現(xiàn)產(chǎn)生異常對(duì)象程序的狀態(tài)信息

“異常”被看作是對(duì)象,是繼承自類Throwable的子類。所有Throwable的子類所產(chǎn)生的對(duì)象實(shí)例,都是異常。第9頁(yè),共32頁(yè),2023年,2月20日,星期三1異常和異常對(duì)象異常類的層次

ErrorObjectThrowableExceptionRuntimeExceptionNon_RuntimeException第10頁(yè),共32頁(yè),2023年,2月20日,星期三1異常和異常對(duì)象運(yùn)行時(shí)異常:運(yùn)行異常可以不做處理,運(yùn)行時(shí)系統(tǒng)會(huì)把生成的運(yùn)行時(shí)異常對(duì)象交給默認(rèn)的異常處理程序,在標(biāo)準(zhǔn)輸出上顯示異常的內(nèi)容及發(fā)生異常的位置。第11頁(yè),共32頁(yè),2023年,2月20日,星期三1異常和異常對(duì)象ArithmeticException:除0,用0取模;NullPointException:訪問(wèn)一個(gè)空對(duì)象中的變量和方法,或一個(gè)空數(shù)組中的元素;ClassCastException:把對(duì)象o強(qiáng)制成ClassC,而o既不是C的實(shí)例,又不是C的子類的實(shí)例;NegativeArraySizeException:數(shù)組的長(zhǎng)度是負(fù)數(shù);ArrayIndexOutOfBoundsException:訪問(wèn)數(shù)組中的非法元素。第12頁(yè),共32頁(yè),2023年,2月20日,星期三1異常和異常對(duì)象非運(yùn)行時(shí)異常:非運(yùn)行異常需要使用try-catch-finally語(yǔ)句捕獲異常或使用throws子句生聲明異常。第13頁(yè),共32頁(yè),2023年,2月20日,星期三1異常和異常對(duì)象IOExceptionFileNotFoundException:找不到文件;InterruptedIOException;UnknownHostException;UnknownServiceException;SocketException;MalformedURLException;NoSuchMethodExceptionClassNotFoundException第14頁(yè),共32頁(yè),2023年,2月20日,星期三2異常的處理過(guò)程拋出異常:產(chǎn)生一個(gè)異常對(duì)象以及把它轉(zhuǎn)交給運(yùn)行系統(tǒng)間接拋出(try)直接拋出(throw)捕獲異常(catch):找出異常的合適處理方法,即異常指針的選擇過(guò)程處理異常第15頁(yè),共32頁(yè),2023年,2月20日,星期三2異常的處理過(guò)程Java的異常處理機(jī)制由try/catch/finally組成try{//可能會(huì)產(chǎn)生異常的程序塊}catch(Exception1){ //異常處理}catch(Exception2){ //異常處理}[finally{ //清除方法狀態(tài)和關(guān)閉文件等語(yǔ)句}]第16頁(yè),共32頁(yè),2023年,2月20日,星期三2異常的處理過(guò)程例1:try{ System.in.read();}catch(IOExceptione){ Stringerr=e.getMessage(); System.out.println(err); }第17頁(yè),共32頁(yè),2023年,2月20日,星期三//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頁(yè),共32頁(yè),2023年,2月20日,星期三第19頁(yè),共32頁(yè),2023年,2月20日,星期三//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頁(yè),共32頁(yè),2023年,2月20日,星期三第21頁(yè),共32頁(yè),2023年,2月20日,星期三2異常的處理過(guò)程--聲明異常例2:聲明異常ProtectedvoidmyMethod(){try{ doRead();}catch(IOExceptione){ System.out.println(e.getMessage());}}ProtectedvoiddoRead()throwsIOException{ System.in.read();}第22頁(yè),共32頁(yè),2023年,2月20日,星期三2異常的處理過(guò)程—拋出異常例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頁(yè),共32頁(yè),2023年,2月20日,星期三2異常的處理過(guò)程Throw語(yǔ)句會(huì)使得一個(gè)異常被拋擲,其結(jié)果將導(dǎo)致程序控制的轉(zhuǎn)換,即轉(zhuǎn)向處理異常的catch塊。形式: thrownewException(“描述字符串”);Throws是將本方法產(chǎn)生的異常不處理,而是拋給上層調(diào)用者。第24頁(yè),共32頁(yè),2023年,2月20日,星期三§1.3創(chuàng)建自己的異常類創(chuàng)建自己的異常類 繼承Exception及其子類,多數(shù)情況下為非運(yùn)行時(shí)異常。如 classMyExceptionextendsException{

… Stringsay(){…} }在程序中使用自己的異常類 classUseMyException{

…try{thrownewMyException(); }catch(MyExceptione){System.out.println(e.say()); } } 第25頁(yè),共32頁(yè),2023年,2月20日,星期三小結(jié)JAVA異常處理機(jī)制及處理過(guò)程異常處理與程序的結(jié)合使用異常,運(yùn)行時(shí)異常,非運(yùn)行時(shí)異常,Error,try-catch-finally,throw,throws第26頁(yè),共32頁(yè),2023年,2月20日,星期三習(xí)題解釋JAVA異常處理機(jī)制及處理過(guò)程解釋異常,運(yùn)行時(shí)異常,非運(yùn)行時(shí)異常第27頁(yè),共32頁(yè),2023年,2月20日,星期三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頁(yè),共32頁(yè),2023年,2月20日,星期三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頁(yè),共32頁(yè),2023年,2月20日,星期三UsingExceptionsclassDivideByZeroExceptionextendsArithmeticException{publicDivideByZeroException(){

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論