




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四篇Java語言基礎類第八章 異常第九章 字符串第十章 線程第四篇Java語言基礎類8.1異常的概念8.2異常的分類8.3創(chuàng)建異常類型8.4throw8.5throws子句8.6try、catch和finally8.7何時使用異常8.8小結第八章異?!菊n前思考】
什么是異常?Java中對異常的處理機制是什么?【學習目標】
本講主要講述了Java語言中的獨特的異常處理機制,通過本講的學習,同學們可以編寫更為完善的Java程序?!緦W習指南】
仔細閱讀本章各知識點的內容,深刻理解Java語言中獨特的例外處理機制,掌握處理問題的方法,多練習,多上機。【難重點】
重點:在編寫程序時,要正確地使用捕獲異常和聲明拋棄異常的兩種異常處理的方法。
難點:如何使用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ī)代碼中分離出來把錯誤傳播給調用堆棧按錯誤類型和錯誤差別分組系統(tǒng)提供了對于一些無法預測的錯誤的捕獲和處理克服了傳統(tǒng)方法的錯誤信息有限的問題method1method2method3method4產(chǎn)生異常傳遞處理異常JDK的每個包中都定義了異常類,都繼承自Throwable類,該類的任一擴展類所實例化的對象都稱為異常對象。8.2 異常的分類類型定義舉例Error由Java虛擬機生成并拋出,描述Java運行時間系統(tǒng)內部的錯誤以及資源耗盡情況。Java程序不做處理。(Error情況很少出現(xiàn))動態(tài)鏈接失敗虛擬機錯誤RuntimeException(運行時異常)由于編程錯誤,產(chǎn)生的便是RuntimeException錯誤的轉型數(shù)組越界存取空指針訪問非RuntimeException的Exception由不可預測的因素造成的異常事件。試圖越過文件尾繼續(xù)讀取試圖打開一個形式錯誤的URL8.2 異常的分類Throwable不做處理Error由用戶捕獲或聲明并處理缺省的異常處理程序ExceptionRuntimeException√√非檢測性異常檢測性異常非檢測性異常例18.2 異常的分類classExceptionDemo2{
publicstaticvoidmain(Stringargs[]){
inta=0;
System.out.println(5/a);//運行時異常
}
}結果:C:\>javacExceptionDemo2.java
C:\>javaExceptionDemo2
java.lang.ArithmeticException:/byzeroat
ExceptionDemo2.main(ExceptionDemo2.java:4)說明:因為除數(shù)不能為0,所以在程序運行的時候出現(xiàn)了除0溢出的異常事件。如果Java內建的異常類無法滿足程序的要求,那么就需要創(chuàng)建自己的異常。需要將異常類從Exception中繼承出來,或從Exception的一個子類繼承,如IOException。例2:用一個新的屬性值替換一個制定屬性的當前值,如果該屬性名不存在,替換不合理,引發(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ā)異常的兩種途徑:在方法或構造器中,自己通過throw語句引發(fā)異常調用可引發(fā)某種異常的方法或構造器 定義:說明一個方法可引發(fā)的一組檢測性異常。它包含一個用逗號分隔的異常類型表。功能:使方法或構造器的調用者知道,調用可能返回正常結果,也可能得到異常結果。只有在方法中未被捕獲的異常才必須列出。8.5throws子句publicvoidreplaceValue(Stringname,ObjectnewValue)
throwsNoSuchAttributeException{Attrattr=find(name);//lookuptheattrif(attr==null)//itisn’tfoundthrownewNoSuchAttributeException(name);attr.setValue(newValue);}只有throws子句說明過的異常類型才可以被引發(fā)。若方法沒有throws子句,則說明不能引發(fā)異常。當調用一個在其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)一的出口,使得在控制流轉到程序的其它部分以前,能夠對程序的狀態(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語句都會被執(zhí)行。8.6try、catch和finallytry{
statements1
//接受監(jiān)視的程序塊,在此區(qū)域內發(fā)生的異常,由catch中指定的程序處理
}catch(exception_type1identifier1){//要處理的異常類型和標識符
statements2 //處理異常
}catch(exception_type2
identifier2){//要處理的異常類型和標識符
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語句的順序有關,當捕獲到一個異常對象時,剩下的catch語句就不再進行匹配。因此,在安排catch語句的順序時,首先應該捕獲最特殊的異常對象,然后再逐漸一般化。即先安排子類,再安排父類。若引發(fā)的異常與catch中的異常類型或超類類型都不匹配,該異常將被轉送到調用這個方法的代碼。8.6try、catch和finallyclassSuperExceptionextendsException{}classSubExceptionextendsSuperException{}classBadCatch{publicvoidgoodTry(){/*ThisisanINVALIDcatchordering*/try{thrownewSubException();}catch(SuperExceptionsuperRef){//CatchesbothSuperExceptionandSubException}catch(SubExceptionsubRef){//Thiswouldneverbereached}}}finally:用來清理內部狀態(tài)或釋放非對象資源。finally子句可用來對break、continue和return進行清理。不論執(zhí)行何種控制轉移語句,finally子句都被執(zhí)行。finally在文件處理時非常有用若在finally塊中重建了結束原因,則該原因取代原先的原因,以前原因被遺忘。8.6.1finallytry{對文件進行處理的程序;}catch(IOExceptione){//對文件異常進行處理;}finally{不論是否發(fā)生異常,都關閉文件;}try{//...dosomething...return1;}finally{return2}在不知結束條件時,通過異常來檢測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ā)多種類型的異常。異常的類需先設計好,擴展于Exception,修飾以public,并含有適當?shù)挠蚝蜆嬙炱?;在調用時,用try-catch-finally來捕獲這些類型的異常。一般格式:正常程序和出錯處理分離開來8.8小結try{Javastatement;}catch(ExceptionType1ExceptionObject){
Exception1handling;}catch(ExceptionType2ExceptionObject){
Except
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京2024年江蘇南京醫(yī)科大學第四附屬醫(yī)院招聘40人筆試歷年參考題庫附帶答案詳解
- 銷售資產(chǎn)合同范本
- 科技教育中的綠色能源技術培訓與投資策略
- 墓碑雕刻合同范本
- 科技安全與老年人日常生活結合的防護措施
- 中央2025年中央軍委后勤保障部招考專業(yè)技能崗位文職人員585人筆試歷年參考題庫附帶答案詳解
- Troriluzole-hydrochloride-BHV-4157-hydrochloride-生命科學試劑-MCE
- 單位合同范本6
- 1-3-Diarachidoyl-glycerol-生命科學試劑-MCE
- 基坑維護合同范本
- 部編版小學(2024版)小學道德與法治一年級下冊《有個新目標》-第一課時教學課件
- 2025年山東鋁業(yè)職業(yè)學院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2024年湖南汽車工程職業(yè)學院單招職業(yè)技能測試題庫標準卷
- (正式版)HGT 6313-2024 化工園區(qū)智慧化評價導則
- 二級公立醫(yī)院績效考核三級手術目錄(2020版)
- 電廠機組深度調峰摸底試驗方案
- 地球上的大氣知識結構圖
- 加油站數(shù)質量管理考核辦法版.doc
- 華文版四年級下冊全冊書法教案
- 最新整理自動化儀表專業(yè)英語詞匯只是分享
- 強夯、堆載預壓地基處理方案
評論
0/150
提交評論