Java面向?qū)ο蟪绦蛟O(shè)計(jì)-課件 第5章 Java面向?qū)ο蟾呒壧匦訽第1頁
Java面向?qū)ο蟪绦蛟O(shè)計(jì)-課件 第5章 Java面向?qū)ο蟾呒壧匦訽第2頁
Java面向?qū)ο蟪绦蛟O(shè)計(jì)-課件 第5章 Java面向?qū)ο蟾呒壧匦訽第3頁
Java面向?qū)ο蟪绦蛟O(shè)計(jì)-課件 第5章 Java面向?qū)ο蟾呒壧匦訽第4頁
Java面向?qū)ο蟪绦蛟O(shè)計(jì)-課件 第5章 Java面向?qū)ο蟾呒壧匦訽第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

異常(Exception)處理2本講內(nèi)容異常機(jī)制簡介try代碼段拋出異常(throw語句)捕獲異常(catch代碼段)再拋異常(throw)finally代碼段throws語句JDK中的異常自己定義的異常31.異常機(jī)制簡介在進(jìn)行程序設(shè)計(jì)時(shí),錯(cuò)誤的產(chǎn)生是不可避免的,如何處理錯(cuò)誤?把錯(cuò)誤交給誰去處理?程序又該如何從錯(cuò)誤中恢復(fù)?這是任何程序設(shè)計(jì)語言都要解決的問題。所謂錯(cuò)誤,是在程序運(yùn)行過程中發(fā)生的異常事件,比如除0溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻礙程序的正常運(yùn)行。為了增加程序的強(qiáng)壯性,程序設(shè)計(jì)時(shí),必須考慮到可能發(fā)生的異常情況并做出相應(yīng)的處理。41.異常機(jī)制簡介普通的錯(cuò)誤處理方法通過被調(diào)用函數(shù)的返回值感知在被調(diào)用函數(shù)中產(chǎn)生的錯(cuò)誤;通過使用if語句來判斷是否出現(xiàn)了錯(cuò)誤并進(jìn)行處理。這種錯(cuò)誤處理機(jī)制會導(dǎo)致不少問題函數(shù)的返回值一般有程序意義,需要定義用于錯(cuò)誤處理的無效的返回值;為知道錯(cuò)誤產(chǎn)生的內(nèi)部細(xì)節(jié),常用全局變量(如Errno)來存儲錯(cuò)誤的類型,這容易導(dǎo)致誤用,因?yàn)樽兞康闹涤锌赡苓€未被處理就被另外的錯(cuò)誤覆蓋掉。5沒有錯(cuò)誤處理的程序{openTheFile;determineitssize;allocatethatmuchmemory;read-file……closeTheFile;}6以常規(guī)方法處理錯(cuò)誤openFiles;if(theFilesOpen){

determinethelengthofthefile;if(gotTheFileLength){

allocatethatmuchmemory;if(gotEnoughMemory){

readthefileintomemory;if(readFailed)errorCode=-1;}elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;……7以常規(guī)方法處理錯(cuò)誤存在的困難和問題寫程序難大部分精力花在出錯(cuò)處理上了只把能夠想到的錯(cuò)誤考慮到對以外的情況無法處理程序可讀性差大量的錯(cuò)誤處理代碼混雜在程序中出錯(cuò)返回的信息量太少無法更確切的了解錯(cuò)誤狀況或原因8

用異常機(jī)制處理錯(cuò)誤try{openTheFile;determineitssize;allocatethatmuchmemory;read-File;closeTheFile;}catch(fileopenFailed){dosomething;}catch(sizeDetermineFailed){dosomething;}catch(memoryAllocateFailed){dosomething;}catch(readFailed){dosomething;}catch(fileCloseFailed){dosomething;}finally{dosomething;}92.Java異常機(jī)制try{…}定義可能產(chǎn)生異常的代碼段throwe;用于拋出一個(gè)異常catch(Etypee){…}用于捕獲一個(gè)異常finally{…}用于做統(tǒng)一的事后處理,如釋放資源throwsEtype1,Etype2……用于聲明方法可能拋出的異常類型try-catch-finally103.try代碼段try代碼段包含可能產(chǎn)生異常的代碼try代碼段后跟有一個(gè)或多個(gè)catch代碼段每個(gè)catch代碼段聲明其能處理的一種特定類型的異常每個(gè)catch代碼段都是一段異常處理代碼try{

可能產(chǎn)生異常的語句}//不能有其它語句分隔catch(Etypee){

處理異常的語句}……finally{

事后處理語句}114.拋出異常(throw語句)任何從Throwable派生的類都可以用throw語句拋出,拋出異常用來表明程序遇到的錯(cuò)誤無法正常執(zhí)行而需要異常處理thrownewMyException(“someinfomation”);異??梢杂蓆ry代碼段中的語句拋出也可以從被try代碼段中調(diào)用的方法中拋出異常還可能產(chǎn)生于數(shù)組下標(biāo)越界以及Java虛擬機(jī)內(nèi)部錯(cuò)誤等Exception和Error是Throwable的直接派生類Exception程序應(yīng)該處理的異常情形Error代表系統(tǒng)嚴(yán)重錯(cuò)誤,一般程序不處理這類錯(cuò)誤異常拋出點(diǎn)后的代碼在拋出異常后不再執(zhí)行也可以說異常的拋出終止了代碼段的執(zhí)行125.捕獲異常(catch代碼段)catch代碼段聲明其能捕獲的異常類型,并包含處理該類型異常的代碼異??偸怯删嚯x產(chǎn)生異常最近的匹配catch代碼段處理catch(Exceptione)捕獲所有Exceptioncatch(Throwablet)捕獲Exception和Errortry{

可能產(chǎn)生異常的語句}//不能有其它語句分隔catch(Etypee){

處理異常的語句}……finally{

事后處理語句}135.捕獲異常(續(xù)1)如果沒有相應(yīng)的異常處理,則異常被交給上一層try代碼段進(jìn)行處理異常處理的查找依據(jù)類型匹配原則順序進(jìn)行第一個(gè)匹配的異常處理被執(zhí)行,當(dāng)異常處理執(zhí)行完畢,程序接著最后一個(gè)catch代碼段后的語句執(zhí)行異常處理的順序影響到異常的處理子類異??杀桓割惍惓L幚聿东@不要先捕獲父類異常,再捕獲子類異常如果找不到相應(yīng)的異常處理非GUI程序結(jié)束程序執(zhí)行;Applet或GUI程序回復(fù)到事件處理狀態(tài)146.finally代碼段用于及時(shí)釋放系統(tǒng)資源例如關(guān)閉文件刪除臨時(shí)文件總被執(zhí)行產(chǎn)生異常時(shí),異常處理完畢后執(zhí)行無異常產(chǎn)生時(shí),try代碼段執(zhí)行完畢后執(zhí)行

break,return,continuetry{

可能產(chǎn)生異常的語句}//不能有其它語句分隔catch(Etypee){

處理異常的語句}……finally{

事后處理語句}157.throws語句用于方法定義中,表示一個(gè)方法可能拋出的異常publicintread()throwsIOException

168.異常的分類Error:系統(tǒng)的嚴(yán)重錯(cuò)誤,一般由Java虛擬機(jī)監(jiān)測生成并拋出,它們包括動態(tài)鏈接失敗、虛擬機(jī)錯(cuò)誤、線程死鎖等,Java程序?qū)λ鼈円话悴蛔鎏幚?。Exception:一般性程序故障,一般由用戶代碼或類庫生成并拋出,Java程序需要對它們進(jìn)行處理。RuntimeException:運(yùn)行時(shí)程序故障,例如被零除、數(shù)組下標(biāo)越界等。這些錯(cuò)誤可能在任何方法中產(chǎn)生,并且良好的程序應(yīng)該可以避免這些錯(cuò)誤。179.Throwable類的方法Throwable()Throwable(Stringmessage)StringtoString()“classname”:“getMessage()”

StringgetMessage()StringgetLocalizedMessage()voidprintStackTrace()voidprintStackTrace(PrintStream

s)voidprintStackTrace(PrintWriters)ThrowablefillInStackTrace()ThrowableErrorExceptionRuntimeException1877:publicstaticvoidmain(String[]args){78:try{79:testThrowable();80:}81:catch(Throwablet){82:System.err.println(t.toString());83:System.err.println(t.getMessage());84:System.err.println(t.getLocalizedMessage());85:t.printStackTrace();86:}87:}…136:staticvoidtestThrowable()throwsThrowable{137:thrownewThrowable("測試Throwable的用法。");138:}java.lang.Throwable:測試Throwable的用法。測試Throwable的用法。測試Throwable的用法。java.lang.Throwable:測試Throwable的用法。

attest.Untitled1.testThrowable(Untitled1.java:137)attest.Untitled1.main(Untitled1.java:79)1977:publicstaticvoidmain(String[]args){78:try{79:testThrowable();80:}81:catch(Throwablet){82:System.err.println(t.toString());83:System.err.println(t.getMessage());84:System.err.println(t.getLocalizedMessage());85:

t.printStackTrace(System.err);86:}87:}…136:staticvoidtestThrowable()throwsThrowable{137:

thrownewThrowable();138:}java.lang.Throwablenullnulljava.lang.Throwableattest.Untitled1.testThrowable(Untitled1.java:137)attest.Untitled1.main(Untitled1.java:79)2010.一些常用的異常類Error(allinjava.lang)LinkageErrorThreadDeathVirtualMachineErrorInternalErrorOutOfMemoryErrorStackOverflowErrorUnknownErrorAWTError(injava.awt)2110.一些常用的異常類Exception(injava.lang)ClassNotFoundExceptionCloneNotSupportedExceptionInterruptedExceptionRuntimeExceptionArithmeticExceptionClassCastExceptionInllegalArgumentExceptionInllegalThreadStateExceptionNumberFormatException2210.一些常用的異常類InllegalMonitorStateExceptionInllegalStateExceptionIndexOutOfBoundsExceptionArrayIndexOutObBoundsExceptionStringIndexOutObBoundsExceptionNegativeArraySizeExceptionNullPointerExceptionSecurityExceptionEmptyStackException(injava.util)MissingResourceException(injava.util)NoSuchElementExce

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論