版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Java異常處理Java實(shí)用編程技術(shù)所謂異常是指程序在運(yùn)行過程中出現(xiàn)的不正常情況或錯(cuò)誤。異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)是可以避免的。有些異常需要處理,有些則不需要處理在不支持異常處理的計(jì)算機(jī)語言中,錯(cuò)誤必須被手工的檢查和處理——典型的是通過錯(cuò)誤代碼的運(yùn)用Java異常是一個(gè)描述在代碼段中發(fā)生的異常(也就是出錯(cuò))情況的對(duì)象。當(dāng)異常情況發(fā)生,一個(gè)代表該異常的對(duì)象被創(chuàng)建并且在導(dǎo)致該錯(cuò)誤的方法中被引發(fā)(throw)。異常概念Java實(shí)用編程技術(shù)Java異常處理通過5個(gè)關(guān)鍵字控制:try、catch、throw、throws和finally程序聲明了你想要的異常監(jiān)控包含在一個(gè)try塊中。如果在try塊中發(fā)生異常,它被拋出。你的代碼可以捕捉這個(gè)異常(用catch)并且用某種合理的方法處理該異常任何在方法返回前絕對(duì)被執(zhí)行的代碼被放置在finally塊中手動(dòng)引發(fā)一個(gè)異常,用關(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)告。此類錯(cuò)誤在編譯的時(shí)候會(huì)被檢查出來,并不會(huì)產(chǎn)生運(yùn)行代碼,只有更正程序中的語法問題后才可以運(yùn)行程序。運(yùn)行異常是指程序在執(zhí)行過程中發(fā)生的錯(cuò)誤,它會(huì)中斷程序的正常執(zhí)行。例如,計(jì)算時(shí)除數(shù)為零、數(shù)組下標(biāo)越界、文件沒找到等。異常分類Java實(shí)用編程技術(shù)邏輯運(yùn)行異常是指程序不能實(shí)現(xiàn)編程人員的設(shè)計(jì)意圖和設(shè)計(jì)功能而產(chǎn)生的錯(cuò)誤,即程序運(yùn)行后沒得到預(yù)期的結(jié)果,和需求有不一致的地方。此類錯(cuò)誤從語法上來說是有效的,只是程序在邏輯上存在缺陷。異常分類Java實(shí)用編程技術(shù)所有異常類型都是內(nèi)置類Throwable的子類。因此,Throwable在異常類層次結(jié)構(gòu)的頂層Throwable下面的是兩個(gè)把異常分成兩個(gè)不同分支的子類。一個(gè)分支是Exception。該類用于用戶程序可能捕捉的異常情況另一類分支由Error作為頂層,Error定義了在通常環(huán)境下不希望被程序捕獲的異常。Error類型的異常用于Java運(yùn)行時(shí)系統(tǒng)來顯示與運(yùn)行時(shí)系統(tǒng)本身有關(guān)的錯(cuò)誤Throwable類Java實(shí)用編程技術(shù)所有異常類型都是內(nèi)置類Throwable的子類。因此,Throwable在異常類層次結(jié)構(gòu)的頂層Throwable下面的是兩個(gè)把異常分成兩個(gè)不同分支的子類。一個(gè)分支是Exception。該類用于用戶程序可能捕捉的異常情況另一類分支由Error作為頂層,Error定義了在通常環(huán)境下不希望被程序捕獲的異常。Error類型的異常用于Java運(yùn)行時(shí)系統(tǒng)來顯示與運(yùn)行時(shí)系統(tǒng)本身有關(guān)的錯(cuò)誤關(guān)于Error類型的異常處理,因?yàn)樗鼈兺ǔJ菫?zāi)難性的致命錯(cuò)誤,不是你的程序可以控制的Throwable類Java實(shí)用編程技術(shù)Throwable類Java實(shí)用編程技術(shù)為防止和處理一個(gè)運(yùn)行時(shí)錯(cuò)誤,只需要把你所要監(jiān)控的代碼放進(jìn)一個(gè)try塊就可以了。緊跟著try塊的,包括一個(gè)說明你希望捕獲的錯(cuò)誤類型的catch子句try—catch異常處理代碼塊的基本形式:try{//監(jiān)視可能發(fā)生異常的代碼塊;}catch(異常類型異常對(duì)象名)//捕獲并處理異常{//異常處理代碼塊;}處理異常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ù)為防止和處理一個(gè)運(yùn)行時(shí)錯(cuò)誤,只需要把你所要監(jiān)控的代碼放進(jìn)一個(gè)try塊就可以了。緊跟著try塊的,包括一個(gè)說明你希望捕獲的錯(cuò)誤類型的catch子句try—catch異常處理代碼塊的基本形式:try{//監(jiān)視可能發(fā)生異常的代碼塊;}catch(異常類型異常對(duì)象名)//捕獲并處理異常{//異常處理代碼塊;}處理異常Java實(shí)用編程技術(shù)為防止和處理一個(gè)運(yùn)行時(shí)錯(cuò)誤,只需要把你所要監(jiān)控的代碼放進(jìn)一個(gè)try塊就可以了。緊跟著try塊的,包括一個(gè)說明你希望捕獲的錯(cuò)誤類型的catch子句try—catch異常處理代碼塊的基本形式:try{//監(jiān)視可能發(fā)生異常的代碼塊;}catch(異常類型異常對(duì)象名)//捕獲并處理異常{//異常處理代碼塊;}處理異常Java實(shí)用編程技術(shù)某些情況,由單個(gè)代碼段可能引起多個(gè)異常。處理這種情況,你可以定義兩個(gè)或更多的catch子句,每個(gè)子句捕獲一種類型的異常。當(dāng)異常被引發(fā)時(shí),每一個(gè)catch子句被依次檢查,第一個(gè)匹配異常類型的子句執(zhí)行。當(dāng)一個(gè)catch語句執(zhí)行以后,其他的子句被旁路,執(zhí)行從try/catch塊以后的代碼開始繼續(xù)處理異常Java實(shí)用編程技術(shù)多個(gè)catch異常處理代碼塊的基本形式:try{//可能發(fā)生異常的代碼塊;}catch(異常類型1異常對(duì)象名1){//異常處理代碼塊1;}…catch(異常類型n異常對(duì)象名n){//異常處理代碼塊n;}處理異常Java實(shí)用編程技術(shù)異??梢詫?dǎo)致方法過早返回,后續(xù)處理語句可能就不被執(zhí)行,這在有些場合時(shí)危險(xiǎn)的。例如,如果一個(gè)方法打開一個(gè)文件項(xiàng)并關(guān)閉,然后退出,你不希望關(guān)閉文件的代碼被異常處理機(jī)制旁路。finally關(guān)鍵字為處理這種意外而設(shè)計(jì)finally創(chuàng)建一個(gè)代碼塊。該代碼塊在一個(gè)try/catch塊完成之后另一個(gè)try/catch出現(xiàn)之前執(zhí)行。finally塊無論有沒有異常引發(fā)都會(huì)執(zhí)行。如果異常被引發(fā),finally甚至是在沒有與該異常相匹配catch子句情況下也將執(zhí)行處理異常Java實(shí)用編程技術(shù)如果在一個(gè)方法中生成了一個(gè)異常,但是這一方法并不確切地知道該如何對(duì)這一異常事件進(jìn)行處理,這時(shí),一個(gè)方法就應(yīng)該聲明拋出異常,使得異常對(duì)象可以從調(diào)用棧向后傳播,直到有合適的方法捕獲它為止聲明拋出異常是在一個(gè)方法聲明中的throws子句中指明的包含throws子句的方法的基本形式:[修飾符]返回類型方法名(參數(shù)去,參數(shù)2,……)
throws異常列表{……}聲明及拋出異常Java實(shí)用編程技術(shù)下面是一個(gè)不正確的例子。該例試圖引發(fā)一個(gè)它不能捕獲的異常。因?yàn)槌绦驔]有指定一個(gè)throws子句來聲明這一事實(shí),程序?qū)⒉粫?huì)編譯聲明及拋出異常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ù)拋出異常首先要生成異常對(duì)象,異常或者由虛擬機(jī)生成,或者由某些類的實(shí)例生成,也可以在程序中生成。手動(dòng)拋出異常對(duì)象是通過throw語句實(shí)現(xiàn)的,但可以拋出的異常必須是Throwable或其子類的實(shí)例throw語句的通常形式如下:throwThrowableInstance這里,ThrowableInstance一定是Throwable類類型或Throwable子類類型的一個(gè)對(duì)象使用throw拋出異常Java實(shí)用編程技術(shù)盡管Java的內(nèi)置異常處理大多數(shù)常見錯(cuò)誤,你也許希望建立你自己的異常類型來處理你所應(yīng)用的特殊情況只要定義Exception的一個(gè)子類就可以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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 亞文化抵抗與政治參與-洞察分析
- 云計(jì)算在金融行業(yè)的發(fā)展-洞察分析
- 2023-2024學(xué)年重慶市主城區(qū)七校高一上學(xué)期期末考試生物試題(解析版)
- 2024-2025學(xué)年云南省高二上學(xué)期11月期中物理試題(解析版)
- 維護(hù)文檔標(biāo)準(zhǔn)化-洞察分析
- 線上線下融合新車零售策略-洞察分析
- 火災(zāi)處置流程
- 糖尿病病人護(hù)理措施
- 軟土地基處理措施
- 稅務(wù)信息化解決方案-洞察分析
- 鐵路工程-軌道工程施工工藝及方案
- 福建省福州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- 《高中語文文言斷句》一等獎(jiǎng)優(yōu)秀課件
- 上海市中小學(xué)生學(xué)籍信息管理系統(tǒng)
- (完整版)自動(dòng)感應(yīng)門施工方案
- [QC成果]提高剪力墻施工質(zhì)量一次合格率
- 8站小車呼叫的plc控制
- _ 基本粒子與宏觀物體內(nèi)在聯(lián)系
- 象棋比賽積分編排表
- 小學(xué)贛美版六年級(jí)美術(shù)上冊(cè)第二十課向往和平課件(16張)ppt課件
- DPP4抑制劑比較篇PPT課件
評(píng)論
0/150
提交評(píng)論