版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Java異常處理Java實(shí)用編程技術(shù)所謂異常是指程序在運(yùn)行過程中出現(xiàn)的不正常情況或錯誤。異常是程序中的一些錯誤,但并不是所有的錯誤都是異常,并且錯誤有時是可以避免的。有些異常需要處理,有些則不需要處理在不支持異常處理的計(jì)算機(jī)語言中,錯誤必須被手工的檢查和處理——典型的是通過錯誤代碼的運(yùn)用Java異常是一個描述在代碼段中發(fā)生的異常(也就是出錯)情況的對象。當(dāng)異常情況發(fā)生,一個代表該異常的對象被創(chuàng)建并且在導(dǎo)致該錯誤的方法中被引發(fā)(throw)。異常概念Java實(shí)用編程技術(shù)Java異常處理通過5個關(guān)鍵字控制:try、catch、throw、throws和finally程序聲明了你想要的異常監(jiān)控包含在一個try塊中。如果在try塊中發(fā)生異常,它被拋出。你的代碼可以捕捉這個異常(用catch)并且用某種合理的方法處理該異常任何在方法返回前絕對被執(zhí)行的代碼被放置在finally塊中手動引發(fā)一個異常,用關(guān)鍵字throw。任何被引發(fā)方法的異常都必須通過throws子句定義異常概念Java實(shí)用編程技術(shù)try{//需要監(jiān)控的語句塊}catch(ExceptionType1e1){//處理ExceptionType1類型的異常}catch(ExceptionType2e2){//處理ExceptionType1類型的異常}finally//可選{//最后處理的語句塊}異常概念Java實(shí)用編程技術(shù)例子classTest{publicstaticvoidmain(Stringargs[]){inta=0;intb=5/a;}}異常概念Java實(shí)用編程技術(shù)通常異常分為三類:編譯異常、運(yùn)行異常、邏輯異常編譯異常是由于所編寫的程序存在語法問題,未能通過由源代碼到字節(jié)碼的編譯而產(chǎn)生的,它由語言的編譯系統(tǒng)負(fù)責(zé)檢查和報(bào)告。此類錯誤在編譯的時候會被檢查出來,并不會產(chǎn)生運(yùn)行代碼,只有更正程序中的語法問題后才可以運(yùn)行程序。運(yùn)行異常是指程序在執(zhí)行過程中發(fā)生的錯誤,它會中斷程序的正常執(zhí)行。例如,計(jì)算時除數(shù)為零、數(shù)組下標(biāo)越界、文件沒找到等。異常分類Java實(shí)用編程技術(shù)邏輯運(yùn)行異常是指程序不能實(shí)現(xiàn)編程人員的設(shè)計(jì)意圖和設(shè)計(jì)功能而產(chǎn)生的錯誤,即程序運(yùn)行后沒得到預(yù)期的結(jié)果,和需求有不一致的地方。此類錯誤從語法上來說是有效的,只是程序在邏輯上存在缺陷。異常分類Java實(shí)用編程技術(shù)所有異常類型都是內(nèi)置類Throwable的子類。因此,Throwable在異常類層次結(jié)構(gòu)的頂層Throwable下面的是兩個把異常分成兩個不同分支的子類。一個分支是Exception。該類用于用戶程序可能捕捉的異常情況另一類分支由Error作為頂層,Error定義了在通常環(huán)境下不希望被程序捕獲的異常。Error類型的異常用于Java運(yùn)行時系統(tǒng)來顯示與運(yùn)行時系統(tǒng)本身有關(guān)的錯誤Throwable類Java實(shí)用編程技術(shù)所有異常類型都是內(nèi)置類Throwable的子類。因此,Throwable在異常類層次結(jié)構(gòu)的頂層Throwable下面的是兩個把異常分成兩個不同分支的子類。一個分支是Exception。該類用于用戶程序可能捕捉的異常情況另一類分支由Error作為頂層,Error定義了在通常環(huán)境下不希望被程序捕獲的異常。Error類型的異常用于Java運(yùn)行時系統(tǒng)來顯示與運(yùn)行時系統(tǒng)本身有關(guān)的錯誤關(guān)于Error類型的異常處理,因?yàn)樗鼈兺ǔJ菫?zāi)難性的致命錯誤,不是你的程序可以控制的Throwable類Java實(shí)用編程技術(shù)Throwable類Java實(shí)用編程技術(shù)為防止和處理一個運(yùn)行時錯誤,只需要把你所要監(jiān)控的代碼放進(jìn)一個try塊就可以了。緊跟著try塊的,包括一個說明你希望捕獲的錯誤類型的catch子句try—catch異常處理代碼塊的基本形式:try{//監(jiān)視可能發(fā)生異常的代碼塊;}catch(異常類型異常對象名)//捕獲并處理異常{//異常處理代碼塊;}處理異常Java實(shí)用編程技術(shù)例子classTest{publicstaticvoidmain(Stringargs[]){inta,b;try{a=0;b=5/a;System.out.println("Thiswillnotbeprinted.");}處理異常Java實(shí)用編程技術(shù)例子catch(ArithmeticExceptione){System.out.println("Divisionbyzero.");}System.out.println("Aftercatchstatement.");}}處理異常Java實(shí)用編程技術(shù)為防止和處理一個運(yùn)行時錯誤,只需要把你所要監(jiān)控的代碼放進(jìn)一個try塊就可以了。緊跟著try塊的,包括一個說明你希望捕獲的錯誤類型的catch子句try—catch異常處理代碼塊的基本形式:try{//監(jiān)視可能發(fā)生異常的代碼塊;}catch(異常類型異常對象名)//捕獲并處理異常{//異常處理代碼塊;}處理異常Java實(shí)用編程技術(shù)為防止和處理一個運(yùn)行時錯誤,只需要把你所要監(jiān)控的代碼放進(jìn)一個try塊就可以了。緊跟著try塊的,包括一個說明你希望捕獲的錯誤類型的catch子句try—catch異常處理代碼塊的基本形式:try{//監(jiān)視可能發(fā)生異常的代碼塊;}catch(異常類型異常對象名)//捕獲并處理異常{//異常處理代碼塊;}處理異常Java實(shí)用編程技術(shù)某些情況,由單個代碼段可能引起多個異常。處理這種情況,你可以定義兩個或更多的catch子句,每個子句捕獲一種類型的異常。當(dāng)異常被引發(fā)時,每一個catch子句被依次檢查,第一個匹配異常類型的子句執(zhí)行。當(dāng)一個catch語句執(zhí)行以后,其他的子句被旁路,執(zhí)行從try/catch塊以后的代碼開始繼續(xù)處理異常Java實(shí)用編程技術(shù)多個catch異常處理代碼塊的基本形式:try{//可能發(fā)生異常的代碼塊;}catch(異常類型1異常對象名1){//異常處理代碼塊1;}…catch(異常類型n異常對象名n){//異常處理代碼塊n;}處理異常Java實(shí)用編程技術(shù)異??梢詫?dǎo)致方法過早返回,后續(xù)處理語句可能就不被執(zhí)行,這在有些場合時危險的。例如,如果一個方法打開一個文件項(xiàng)并關(guān)閉,然后退出,你不希望關(guān)閉文件的代碼被異常處理機(jī)制旁路。finally關(guān)鍵字為處理這種意外而設(shè)計(jì)finally創(chuàng)建一個代碼塊。該代碼塊在一個try/catch塊完成之后另一個try/catch出現(xiàn)之前執(zhí)行。finally塊無論有沒有異常引發(fā)都會執(zhí)行。如果異常被引發(fā),finally甚至是在沒有與該異常相匹配catch子句情況下也將執(zhí)行處理異常Java實(shí)用編程技術(shù)如果在一個方法中生成了一個異常,但是這一方法并不確切地知道該如何對這一異常事件進(jìn)行處理,這時,一個方法就應(yīng)該聲明拋出異常,使得異常對象可以從調(diào)用棧向后傳播,直到有合適的方法捕獲它為止聲明拋出異常是在一個方法聲明中的throws子句中指明的包含throws子句的方法的基本形式:[修飾符]返回類型方法名(參數(shù)去,參數(shù)2,……)
throws異常列表{……}聲明及拋出異常Java實(shí)用編程技術(shù)下面是一個不正確的例子。該例試圖引發(fā)一個它不能捕獲的異常。因?yàn)槌绦驔]有指定一個throws子句來聲明這一事實(shí),程序?qū)⒉粫幾g聲明及拋出異常Java實(shí)用編程技術(shù)classThrowsDemoTest{staticvoidtest(){System.out.println("Insidetest.");thrownewIllegalAccessException("demo");}publicstaticvoidmain(Stringargs[]){test();}}聲明及拋出異常Java實(shí)用編程技術(shù)改寫為:classThrowsDemoTest{staticvoidtest()throwsIllegalAccessException{System.out.println("Insidetest.");thrownewIllegalAccessException("demo");}聲明及拋出異常Java實(shí)用編程技術(shù)publicstaticvoidmain(Stringargs[]){try{test();}catch(IllegalAccessExceptione){System.out.println("Caught"+e);}}}聲明及拋出異常Java實(shí)用編程技術(shù)拋出異常首先要生成異常對象,異?;蛘哂商摂M機(jī)生成,或者由某些類的實(shí)例生成,也可以在程序中生成。手動拋出異常對象是通過throw語句實(shí)現(xiàn)的,但可以拋出的異常必須是Throwable或其子類的實(shí)例throw語句的通常形式如下:throwThrowableInstance這里,ThrowableInstance一定是Throwable類類型或Throwable子類類型的一個對象使用throw拋出異常Java實(shí)用編程技術(shù)盡管Java的內(nèi)置異常處理大多數(shù)常見錯誤,你也許希望建立你自己的異常類型來處理你所應(yīng)用的特殊情況只要定義Exception的一個子類就可以Exception類自己沒有定義任何方法。當(dāng)然,它繼承了Throwable提供的一些方法。因此,所有異常,包括你創(chuàng)建的,都可以獲得Throwable定義的方法自定義異常Java實(shí)用編程技術(shù)例子:classMyExceptionextendsException{privateintdetail;MyException(inta){detail=a;}publicStringtoString(){return"MyException["+detail+"]";}}自定義異常Java實(shí)用編程技術(shù)classExceptionDemo{staticvoidcompute(inta)throwsMyException{System.out.println("Calledcompute("+a+")");if(a>10)thrownewMyException(a);System.out.println("Normalexit");}自定義異常Java實(shí)用編程技術(shù)publicstaticvoidmain(Stringargs[]){try{
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 測試工程師自動化方向面試題及答案
- 金融風(fēng)險管理師應(yīng)聘攻略及知識考點(diǎn)詳解
- 區(qū)塊鏈工程師金融面試題及答案
- 內(nèi)容運(yùn)營崗位試題庫與解題技巧介紹
- 2025年5G智能制造系統(tǒng)項(xiàng)目可行性研究報(bào)告
- 2026屆河南省新鄉(xiāng)市高三上學(xué)期12月月考?xì)v史試題(含答案)
- 2025年家庭寵物護(hù)理中心項(xiàng)目可行性研究報(bào)告
- 2025年中央空調(diào)節(jié)能技術(shù)應(yīng)用項(xiàng)目可行性研究報(bào)告
- 2025年增材制造技術(shù)項(xiàng)目可行性研究報(bào)告
- 2025年文化創(chuàng)意產(chǎn)業(yè)發(fā)展可行性研究報(bào)告
- 鐵路工程道砟購銷
- 2024年廣東省廣州市中考?xì)v史真題(原卷版)
- 壯醫(yī)藥線療法
- 超星爾雅學(xué)習(xí)通《中國古代史(中央民族大學(xué))》2024章節(jié)測試答案
- 項(xiàng)目4任務(wù)1-斷路器開關(guān)特性試驗(yàn)
- 編輯打印新課標(biāo)高考英語詞匯表3500詞
- (高清版)DZT 0215-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 煤
- 高層建筑消防安全培訓(xùn)課件
- 實(shí)驗(yàn)診斷學(xué)病例分析【范本模板】
- 西安交大少年班真題
- JJF(石化)006-2018漆膜彈性測定器校準(zhǔn)規(guī)范
評論
0/150
提交評論