java課件-第8章異常_第1頁
java課件-第8章異常_第2頁
java課件-第8章異常_第3頁
java課件-第8章異常_第4頁
java課件-第8章異常_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四篇Java語言基礎(chǔ)類第八章 異常第九章 字符串第十章 線程第四篇Java語言基礎(chǔ)類8.1異常的概念8.2異常的分類8.3創(chuàng)建異常類型8.4throw8.5throws子句8.6try、catch和finally8.7何時使用異常8.8小結(jié)第八章異常【課前思考】

什么是異常?Java中對異常的處理機制是什么?【學(xué)習(xí)目標(biāo)】

本講主要講述了Java語言中的獨特的異常處理機制,通過本講的學(xué)習(xí),同學(xué)們可以編寫更為完善的Java程序?!緦W(xué)習(xí)指南】

仔細(xì)閱讀本章各知識點的內(nèi)容,深刻理解Java語言中獨特的例外處理機制,掌握處理問題的方法,多練習(xí),多上機?!倦y重點】

重點:在編寫程序時,要正確地使用捕獲異常和聲明拋棄異常的兩種異常處理的方法。

難點:如何使用Java中的異常處理機制,自定義異常類型與系統(tǒng)已提供的異常類型的區(qū)別與聯(lián)系。8.1異常的概念什么是異常 定義:在程序的運行過程中所發(fā)生的異常事件,它中斷指令的正常執(zhí)行。

Java中提供了一種獨特的異常處理機制。沒有處理錯誤的程序 3.

以常規(guī)方法處理錯誤8.1異常的概念read-file{openTheFile;determineitssize;allocatethatmuchmemory;readthefileintomemory;statement;

closeTheFile;}openFiles;if(theFilesOpen){determinethelenthofthefile;if(gotTheFileLength){allocatethatmuchmemory;if(gotEnoughMemory){readthefileintomemory;if(readSuccess){statement;if(closeTheFile)closeFile;elseerrorCode=-1;}elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;}elseerrorCode=-5;缺點不采用異常處理的缺點:觀察前面的程序你會發(fā)現(xiàn)大部分精力花在出錯處理上只把能夠想到的錯誤考慮到,對以外的情況無法處理程序可讀性差出錯返回信息量太少8.1異常的概念用異常的形式處理錯誤8.1異常的概念read-File;{try{ openTheFile; determineitssize; allocatethatmuchmemory;readthefileintomemory;statement;

closeTheFile;}catch(fileopenFailed) {dosomething;} catch(sizeDetermineFailed) {dosomething;} catch(memoryAllocateFailed) {dosomething;} catch(readFailed) {dosomething;} catch(fileCloseFailed) {dosomething;}}和傳統(tǒng)的方法比較異常的優(yōu)點:把錯誤代碼從常規(guī)代碼中分離出來把錯誤傳播給調(diào)用堆棧按錯誤類型和錯誤差別分組系統(tǒng)提供了對于一些無法預(yù)測的錯誤的捕獲和處理克服了傳統(tǒng)方法的錯誤信息有限的問題method1method2method3method4產(chǎn)生異常傳遞處理異常JDK的每個包中都定義了異常類,都繼承自Throwable類,該類的任一擴展類所實例化的對象都稱為異常對象。8.2 異常的分類類型定義舉例Error由Java虛擬機生成并拋出,描述Java運行時間系統(tǒng)內(nèi)部的錯誤以及資源耗盡情況。Java程序不做處理。(Error情況很少出現(xiàn))動態(tài)鏈接失敗虛擬機錯誤RuntimeException(運行時異常)由于編程錯誤,產(chǎn)生的便是RuntimeException錯誤的轉(zhuǎn)型數(shù)組越界存取空指針訪問非RuntimeException的Exception由不可預(yù)測的因素造成的異常事件。試圖越過文件尾繼續(xù)讀取試圖打開一個形式錯誤的URL8.2 異常的分類Throwable不做處理Error由用戶捕獲或聲明并處理缺省的異常處理程序ExceptionRuntimeException√√非檢測性異常檢測性異常非檢測性異常例18.2 異常的分類classExceptionDemo2{

publicstaticvoidmain(Stringargs[]){

inta=0;

System.out.println(5/a);//運行時異常

}

}結(jié)果:C:\>javacExceptionDemo2.java

C:\>javaExceptionDemo2

java.lang.ArithmeticException:/byzeroat

ExceptionDemo2.main(ExceptionDemo2.java:4)說明:因為除數(shù)不能為0,所以在程序運行的時候出現(xiàn)了除0溢出的異常事件。如果Java內(nèi)建的異常類無法滿足程序的要求,那么就需要創(chuàng)建自己的異常。需要將異常類從Exception中繼承出來,或從Exception的一個子類繼承,如IOException。例2:用一個新的屬性值替換一個制定屬性的當(dāng)前值,如果該屬性名不存在,替換不合理,引發(fā)一個異常。8.3 創(chuàng)建異常類型classMyExceptionextendsException{….}publicclassNoSuchAttributeExceptionextendsException{publicStringattrName;publicNoSuchAttributeException(Stringname){super("Noattributenamed\""+name+"\"found");attrName=name;}}throw:引發(fā)一個異常對象。在Java程序的執(zhí)行過程中,如果出現(xiàn)了異常事件,就會產(chǎn)生一個異常對象。生成的異常對象將傳遞給Java運行時系統(tǒng),這一異常的產(chǎn)生和提交過程稱為引發(fā)(throw)異常。引發(fā)有時也稱為拋出。

throw

ExceptionObject;8.4throwthrow

new

NoSuchAttributeException(

);AmethodExceptionAnothermethodthrowcaughtpublicvoidreplaceValue(Stringname,ObjectnewValue)throwsNoSuchAttributeException{Attrattr=find(name);//lookuptheattrif(attr==null)

//itisn’tfoundthrownewNoSuchAttributeException(name);attr.setValue(newValue);}引發(fā)異常的兩種途徑:在方法或構(gòu)造器中,自己通過throw語句引發(fā)異常調(diào)用可引發(fā)某種異常的方法或構(gòu)造器 定義:說明一個方法可引發(fā)的一組檢測性異常。它包含一個用逗號分隔的異常類型表。功能:使方法或構(gòu)造器的調(diào)用者知道,調(diào)用可能返回正常結(jié)果,也可能得到異常結(jié)果。只有在方法中未被捕獲的異常才必須列出。8.5throws子句publicvoidreplaceValue(Stringname,ObjectnewValue)

throwsNoSuchAttributeException{Attrattr=find(name);//lookuptheattrif(attr==null)//itisn’tfoundthrownewNoSuchAttributeException(name);attr.setValue(newValue);}只有throws子句說明過的異常類型才可以被引發(fā)。若方法沒有throws子句,則說明不能引發(fā)異常。當(dāng)調(diào)用一個在其throws子句中列出了檢測異常的方法時,有以下3種選擇:捕獲并處理該異常。捕獲并映射到自己的一個異常,即引發(fā)一個在自己的throws子句中說明的異常。在自己的throws子句中說明該異常,并使該異常通過。8.5throws子句try-catch-finally語句:實現(xiàn)捕獲并處理異常。捕獲異常的第一步是用try{…}選定捕獲異常的范圍,由try所限定的代碼塊中的語句在執(zhí)行過程中可能會生異常對象并throw(拋出)。捕獲異常的第二步:在catch塊中是對異常對象進行處理的代碼,每個try代碼塊可以伴隨一個或多個catch語句,用于處理try代碼塊中所產(chǎn)生的異常事件。捕獲異常的最后一步是通過finally語句為異常處理提供一個統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語句都會被執(zhí)行。8.6try、catch和finallytry{

statements1

//接受監(jiān)視的程序塊,在此區(qū)域內(nèi)發(fā)生的異常,由catch中指定的程序處理

}catch(exception_type1identifier1){//要處理的異常類型和標(biāo)識符

statements2 //處理異常

}catch(exception_type2

identifier2){//要處理的異常類型和標(biāo)識符

statements3 //處理異常......

}finally{

statements4}例子3,處理replaceValue引發(fā)的異常8.6try、catch和finallyObjectvalue=newInteger(8);try{attributedObj.replaceValue("Age",value);}catch(NoSuchAttributeExceptione){//shouldn'thappen,butrecoverifitdoesAttrattr=newAttr(e.attrName,value);attributeObj.add(attr);}捕獲異常對象的順序和catch語句的順序有關(guān),當(dāng)捕獲到一個異常對象時,剩下的catch語句就不再進行匹配。因此,在安排catch語句的順序時,首先應(yīng)該捕獲最特殊的異常對象,然后再逐漸一般化。即先安排子類,再安排父類。若引發(fā)的異常與catch中的異常類型或超類類型都不匹配,該異常將被轉(zhuǎn)送到調(diào)用這個方法的代碼。8.6try、catch和finallyclassSuperExceptionextendsException{}classSubExceptionextendsSuperException{}classBadCatch{publicvoidgoodTry(){/*ThisisanINVALIDcatchordering*/try{thrownewSubException();}catch(SuperExceptionsuperRef){//CatchesbothSuperExceptionandSubException}catch(SubExceptionsubRef){//Thiswouldneverbereached}}}finally:用來清理內(nèi)部狀態(tài)或釋放非對象資源。finally子句可用來對break、continue和return進行清理。不論執(zhí)行何種控制轉(zhuǎn)移語句,finally子句都被執(zhí)行。finally在文件處理時非常有用若在finally塊中重建了結(jié)束原因,則該原因取代原先的原因,以前原因被遺忘。8.6.1finallytry{對文件進行處理的程序;}catch(IOExceptione){//對文件異常進行處理;}finally{不論是否發(fā)生異常,都關(guān)閉文件;}try{//...dosomething...return1;}finally{return2}在不知結(jié)束條件時,通過異常來檢測8.7何時使用異常while((token=stream.next())!=Stream.END)process(token);stream.close();try{for(;;){process(stream.next());}}catch(StreamEndExceptione){stream.close();}異常Exception是一個類,程序運行時,發(fā)生的每個異常都是具體的對象。一個方法用throws子句說明可引發(fā)多種類型的異常。異常的類需先設(shè)計好,擴展于Exception,修飾以public,并含有適當(dāng)?shù)挠蚝蜆?gòu)造器;在調(diào)用時,用try-catch-finally來捕獲這些類型的異常。一般格式:正常程序和出錯處理分離開來8.8小結(jié)try{Javastatement;}catch(ExceptionType1ExceptionObject){

Exception1handling;}catch(ExceptionType2ExceptionObject){

Except

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論