Java語(yǔ)言中的異常課件_第1頁(yè)
Java語(yǔ)言中的異常課件_第2頁(yè)
Java語(yǔ)言中的異常課件_第3頁(yè)
Java語(yǔ)言中的異常課件_第4頁(yè)
Java語(yǔ)言中的異常課件_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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)介

Java語(yǔ)言中的異常

異常

為了加強(qiáng)程序的魯棒性(強(qiáng)壯性,robust),程序設(shè)計(jì)時(shí),必須考慮到可能發(fā)生的異常事件并做出相應(yīng)的處理

例6-1雖然程序的魯棒性加強(qiáng)了,但結(jié)構(gòu)臃腫,大量的錯(cuò)誤處理代碼混雜在程序中,可讀性差。目標(biāo)程序也會(huì)增大許多出錯(cuò)返回信息量太少,無(wú)法更確切的了解錯(cuò)誤狀況或原因。特別是,當(dāng)出現(xiàn)上述語(yǔ)句沒(méi)包含的情況時(shí),程序?qū)⑹譄o(wú)策

Java異常處理機(jī)制

預(yù)定義了Exception類。在Exception類中定義了程序產(chǎn)生異常的條件

簡(jiǎn)化了代碼的編寫(xiě)。常見(jiàn)的異常也可以統(tǒng)一處理,提高了效率,代碼重用率高

允許程序員自己編寫(xiě)特殊的異常處理程序,以滿足更獨(dú)特的需要

拋出和捕獲

方法的運(yùn)行過(guò)程中,如果發(fā)生了異常,稱程序產(chǎn)生了一個(gè)異常事件,相應(yīng)地生成異常對(duì)象。生成異常對(duì)象并把它提交給運(yùn)行時(shí)系統(tǒng)的這一過(guò)程稱為拋出(throw)異常

異常發(fā)生時(shí),Java運(yùn)行時(shí)系統(tǒng)從生成對(duì)象的代碼塊開(kāi)始進(jìn)行回溯,找到包含相應(yīng)異常處理的方法,并把異常對(duì)象交給該方法處理,這一過(guò)程稱為捕獲(catch)例6-2用異常處理方式來(lái)重寫(xiě)例6-1

異常機(jī)制的優(yōu)點(diǎn)

把異常處理代碼從常規(guī)代碼中分離出來(lái),增加了可讀性,方便修改

按異常類型和差別進(jìn)行分組,即從預(yù)定義的類Exception中派生自己的子類,對(duì)無(wú)法預(yù)測(cè)的異常也可以進(jìn)行捕獲和處理,克服了傳統(tǒng)方法中錯(cuò)誤信息有限的問(wèn)題

異常的處理借助于調(diào)用堆棧按先近后遠(yuǎn)的原則進(jìn)行

異常傳播方式

method1method2method3method4探測(cè)拋出異常傳遞捕獲處理異常調(diào)用異常層次結(jié)構(gòu)

使用異常機(jī)制情況當(dāng)方法因?yàn)樽陨頍o(wú)法控制的原因而不能完成其任務(wù)文件不存在,網(wǎng)絡(luò)連接無(wú)法建立等處理在方法、類庫(kù)、類中拋出的異常如FileInputStream.read產(chǎn)生IOException;

在大的項(xiàng)目中采用統(tǒng)一的方式處理異常時(shí)編寫(xiě)文字處理器一類的程序等;不經(jīng)常發(fā)生但卻可能發(fā)生的故障

異常示例

簡(jiǎn)單擴(kuò)展前面使用過(guò)的程序1-1的HelloWorldApp.java程序,循環(huán)打印一些信息。程序執(zhí)行到第4次循環(huán)時(shí),會(huì)發(fā)生異常代碼見(jiàn)程序6-1

異常處理

try,catch和finally語(yǔ)句

例6-3

try{ //此處為拋出具體異常的代碼}catch(ExceptionType1e){ //拋出ExceptionType1異常時(shí)要執(zhí)行的代碼}catch(ExceptionType2e){ //拋出ExceptionType2異常時(shí)要執(zhí)行的代碼...}catch(ExceptionTypeke){ //拋出ExceptionTypek異常時(shí)要執(zhí)行的代碼}finally{ //必須執(zhí)行的代碼}

程序6-2示例

程序6-2改寫(xiě)了程序6-1。在程序中,捕獲所發(fā)生的異常,將越界的下標(biāo)重新置回0,然后讓程序繼續(xù)執(zhí)行

公共異常ArithmeticException整數(shù)除法中,如果除數(shù)為0,則發(fā)生該類異常NullPointerException

訪問(wèn)沒(méi)有實(shí)例化的對(duì)象或調(diào)用它的方法

inti=12/0;imageim[]=newimage[4];System.out.println(im[0].toString());公共異常NegativeArraySizeException

創(chuàng)建數(shù)組時(shí),元素個(gè)數(shù)是個(gè)負(fù)數(shù)ArrayIndexOutOfBoundsException

數(shù)組下標(biāo)越界SecurityException

一般在瀏覽器內(nèi)拋出。若Applet試圖進(jìn)行下述操作,則拋出此異常:訪問(wèn)本地文件。打開(kāi)一個(gè)套接口,而不是返回到提供Applet的主機(jī)。在運(yùn)行時(shí)環(huán)境中運(yùn)行另一個(gè)程序。公共異常ArrayStoreException

程序試圖存取數(shù)組中錯(cuò)誤的數(shù)據(jù)類型FileNotFoundException

試圖存取一個(gè)并不存在的文件IOException

通常的I/O錯(cuò)誤異常分類在Java中主要有三類異常。類java.lang.Throwable是使用異常處理機(jī)制可被拋出并捕獲的所有異常對(duì)象的父類。它有三個(gè)基本子類,如圖所示。ExceptionErrorRuntimeExceptionThrowable每個(gè)類使用的目的

Error表示很難恢復(fù)的錯(cuò)誤,如內(nèi)存越界。交給系統(tǒng)處理為好RuntimeException用來(lái)表示設(shè)計(jì)或?qū)崿F(xiàn)方面的問(wèn)題,如數(shù)組越界等。因?yàn)樵O(shè)計(jì)和實(shí)現(xiàn)正確的程序不會(huì)引發(fā)這類異常,所以常常不處理它發(fā)生這類異常時(shí),運(yùn)行時(shí)環(huán)境會(huì)輸出一條信息,提示用戶修正錯(cuò)誤其他異常表示運(yùn)行時(shí)因環(huán)境的影響可能發(fā)生并可被處理的問(wèn)題。如文件沒(méi)找到或不完整的URL等。程序員處理它們拋出如果一個(gè)方法確實(shí)引發(fā)了一個(gè)異常,那么在方法中必須寫(xiě)明相應(yīng)的處理代碼。(Error或RuntimeException兩類錯(cuò)誤除外)程序員處理異常有兩種方法:一種是使用try{}、catch(){}塊,捕獲到所發(fā)生的異常類,并進(jìn)行相應(yīng)的處理。catch塊可以為空,表示對(duì)發(fā)生的異常不進(jìn)行處理另一種方法是,程序員不在當(dāng)前方法內(nèi)處理異常,而是把異常拋出到調(diào)用方法中。在說(shuō)明方法時(shí)使用如下格式就可做到這一點(diǎn)異常拋出

異常拋出格式<訪問(wèn)權(quán)限修飾符><返回值類型><方法名>(參數(shù)列表)throws異常列表publicvoidtroubleSome()throwsIOException創(chuàng)建自己的異常用戶自定義的所有異常類都必須是Exception的子類在程序中發(fā)現(xiàn)異常情況時(shí),可以拋出(throw)一個(gè)異常實(shí)例,將其放到異常隊(duì)列中去,并激活Java的異常處理機(jī)制,如:publicclassMyExceptionextendsException{...}thrownewMyException()程序

溫馨提示

  • 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)論