版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度呂松個(gè)人資產(chǎn)分割與子女撫養(yǎng)權(quán)明確離婚協(xié)議書(shū)4篇
- 二零二五版智能碼頭信息平臺(tái)開(kāi)發(fā)與應(yīng)用合同4篇
- 二零二五年度農(nóng)田農(nóng)產(chǎn)品加工承包合作協(xié)議4篇
- 二零二五年酒店餐飲連鎖經(jīng)營(yíng)管理合同3篇
- 2025年度綜藝節(jié)目劇本創(chuàng)作與制作勞動(dòng)合同3篇
- 2025至2030年中國(guó)噴射精煉劑數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)原子保險(xiǎn)柜鎖膽數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年速痔靈軟膏項(xiàng)目可行性研究報(bào)告
- 2025年中國(guó)蜂巢空芯門市場(chǎng)調(diào)查研究報(bào)告
- 2025至2030年稀土玻璃項(xiàng)鏈項(xiàng)目投資價(jià)值分析報(bào)告
- 2022年湖北省武漢市中考數(shù)學(xué)試卷含解析
- TLFSA 003-2020 危害分析與關(guān)鍵控制點(diǎn)(HACCP)體系調(diào)味面制品生產(chǎn)企業(yè)要求
- LY/T 2244.3-2014自然保護(hù)區(qū)保護(hù)成效評(píng)估技術(shù)導(dǎo)則第3部分:景觀保護(hù)
- 紀(jì)律教育月批評(píng)與自我批評(píng)五篇
- GB/T 26480-2011閥門的檢驗(yàn)和試驗(yàn)
- GB/T 13342-2007船用往復(fù)式液壓缸通用技術(shù)條件
- 藥店員工教育培訓(xùn)資料
- GB 20371-2016食品安全國(guó)家標(biāo)準(zhǔn)食品加工用植物蛋白
- 【英語(yǔ)手寫(xiě)體】26英文字母手寫(xiě)體描紅書(shū)寫(xiě)字帖
- 實(shí)習(xí)護(hù)生壓瘡相關(guān)知識(shí)掌握情況及預(yù)防態(tài)度的調(diào)查問(wèn)卷
- 《駱駝祥子》第(9、10、11、12)章檢測(cè)題
評(píng)論
0/150
提交評(píng)論