版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第三部分異常處理第13章Java應(yīng)用異常處理異常概述異常指在程序運行的過程中,發(fā)生了某些意外的事件,如除以0、文件不存在等。如以下代碼:如果傳遞運行期參數(shù)0,那么div方法就進(jìn)行了除以0的操作,是不正常的事件,將發(fā)生異常。異常并不是錯誤,只是一些不正常的事件,錯誤往往與源代碼的Bug或內(nèi)部環(huán)境有關(guān),如內(nèi)存泄露等。Java標(biāo)準(zhǔn)異常類型JavaAPI中提供了很多異常類及錯誤類,所有的異常類和錯誤類都繼承于java.lang.Throwable類,該類的所有子類對象都可以“被當(dāng)成異常拋出”。Throwable類有兩個直接子類:Error類和Exception類。Error類表示錯誤,可能是編譯期錯誤或系統(tǒng)錯誤,往往在程序中并不處理。Exception類表示異常,是所有異常類的父類,是程序員所關(guān)心的。Exception類有很多子類,這些子類可以分為兩種類型。1.運行期異常Exception類有一個子類java.lang.RuntimeException,稱為運行期異常。RuntimeException類及其所有子類都被稱為運行期異常類。顧名思義,運行期異常是程序運行期拋出的異常,這些異常都由Java虛擬機(jī)自動拋出。如除數(shù)為0時,在程序運行期,Java虛擬機(jī)會拋出數(shù)學(xué)異常(ArithmeticException),數(shù)組索引越界時會拋出索引越界異常(ArrayIndexOutOfBoundsException),數(shù)字格式轉(zhuǎn)換出錯時會拋出數(shù)字格式異常(NumberFormatException)等。2.檢測異常除了RuntimeException類及其子類外,其他的異常類型都可以稱為檢測異常(CheckedException)。檢測異常是在程序中使用throw(相關(guān)內(nèi)容參考后續(xù)章節(jié))關(guān)鍵字拋出的異常,編譯器將強(qiáng)制處理這些異常。API中定義了大量的檢測異常,如IOException異常、SQLException異常等,java.io包中很多類的方法都拋出了IOException異?;蚱渥宇惍惓?,標(biāo)記不同的異常事件。第13章Java應(yīng)用異常處理異常處理處理異常的作用是標(biāo)記不正常的事件,如果拋出了異常卻不被處理,程序?qū)⒅袛啵徽5赝顺觥K援惓0l(fā)生后,必須處理異常,保證程序按照不同的流程正常運行下去。Java中使用try、catch、finally語句處理異常。本節(jié)將詳細(xì)介紹異常處理語句的使用。1.trytry塊用來包含不正常的代碼,即可能發(fā)生異常的代碼塊。2.catchCatch塊必須緊跟在try塊之后,稱為捕獲異常,也就是異常處理函數(shù)。3.finallyfinally是異常處理中用來強(qiáng)制執(zhí)行某些代碼的語句。第13章Java應(yīng)用異常處理拋出異常運行期異常在運行時由Java虛擬機(jī)自動拋出,檢測異常必須在編譯期拋出,前面章節(jié)中演示使用的異常都是運行期異常,本節(jié)將介紹如何拋出檢測異常。Java語言使用throw關(guān)鍵字拋出異常,語法如下:只要是Throwable類及其子類,都可以使用throw關(guān)鍵字拋出。而實際應(yīng)用中,往往拋出的是Exception類及其子類,而不會拋出Error。運行throw語句后,即拋出異常。如以下代碼:上述代碼拋出了Exception類型的異常。拋出異常后如果不加以處理,程序?qū)⒅袛?。?3.5節(jié)將介紹為何在程序中使用throw關(guān)鍵字拋出異常。第13章Java應(yīng)用異常處理為何要拋出異常在程序中拋出異常,往往是因為業(yè)務(wù)邏輯中存在一些不正常事件流,而利用拋出異常來標(biāo)記這些事件流,可以對這些事件流進(jìn)行統(tǒng)一處理。如以下代碼:上述代碼中,Account類的取款(withdraw)方法,可能存在因余額不足而無法取款的不正常事件流,那么就可以使用拋出異常的方式來標(biāo)記“余額不足”這個事件流。如果余額不足,使用throw語句拋出Exception類型的異常。而在throw語句處,將出現(xiàn)編譯錯誤,編譯器提醒,拋出異常后必須處理異常。這就是拋出異常的作用:能夠強(qiáng)制該異常被處理,因此異常所標(biāo)記的事件流一定會被處理。如果不使用拋出異常的方式,而為withdraw方法提供不同返回值來標(biāo)記不同事件流,那么程序員調(diào)用該方法時,可能會忽略“余額不足”的事件流。而使用拋出異常來標(biāo)記“余額不足”后,編譯器將強(qiáng)制處理該異常,以保證該事件流不會被忽略。第13章Java應(yīng)用異常處理如何處理拋出的異常如果程序中使用throw語句拋出了異常,那么有兩種處理方式。1.將拋出異常的代碼封裝到try塊中要解決該編譯錯誤,第一種方式就是把throw語句放到try塊中。2.使用throws關(guān)鍵字聲明異常拋出異常后,不使用try-catch語句處理,而是在方法聲明處使用throws關(guān)鍵字聲明異常。第13章Java應(yīng)用異常處理自定義異常類從語法上來說,只要是Throwable及其子類的對象均可拋出。然而,如果盲目地拋出API中的異常類型,會使程序混亂。如以下代碼:上述代碼中調(diào)用了withdraw方法,由于該方法使用throws關(guān)鍵字聲明拋出了Exception類型的異常,使用try-catch語句捕獲了Exception異常。代碼試圖從賬戶中取出1000元,賬戶余額為3000元,不會發(fā)生余額不足的情況,也不會發(fā)生異常。然而,由于在try塊中多了一條會發(fā)生數(shù)學(xué)異常的語句intx=100/0;,所以,運行結(jié)果如下:第13章Java應(yīng)用異常處理throw與throws總結(jié)throw和throws是Java異常處理中兩個非常重要的關(guān)鍵字。雖然寫法類似,有著一定的聯(lián)系,但是作用及含義完全不同。本節(jié)將對這兩個關(guān)鍵字進(jìn)行比較及總結(jié)。1.throw關(guān)鍵字在方法體中使用throw關(guān)鍵字是在方法體中使用的,用來拋出異常對象。2.throw關(guān)鍵字拋出異常后的處理一個方法中若使用throw關(guān)鍵字拋出了某個類型的異常,如果是運行期異常,那么可以不加任何處理。如果是檢測異常,那么有兩種選擇:使用try-catch語句捕獲異?;蛘呤褂胻hrows關(guān)鍵字聲明拋出異常,一般多選用throws關(guān)鍵字聲明拋出異常的方式處理。3.throws關(guān)鍵字在方法聲明處使用throws關(guān)鍵字用在方法聲明處,聲明該方法可能拋出某些異常。throws關(guān)鍵字后面聲明的是異常類型。4.throws關(guān)鍵字后可聲明多種異常throws關(guān)鍵字后可以聲明多種異常類型,用逗號隔開即可。5.throws關(guān)鍵字聲明異常后如何處理如果一個方法使用了throws關(guān)鍵字聲明拋出異常,那么調(diào)用該方法時必須處理聲明的所有異常??梢允褂胻ry-catch語句逐一進(jìn)行捕獲,或者繼續(xù)使用throws關(guān)鍵字進(jìn)行聲明。6.任何方法都可使用throws關(guān)鍵字任何方法都可以無條件地使用throws關(guān)鍵字聲明拋出任意類型的異常,抽象方法也可以??梢哉f,方法使用throws關(guān)鍵字聲明異常,在語法上沒有任何要求。7.方法覆蓋時對throws關(guān)鍵字的要求如果子類覆蓋父類的方法,子類的方法不能聲明拋出比父類方法更多的異常類型。第13章Java應(yīng)用異常處理try-finally的作用在前面章節(jié)中,曾提到try塊后可以沒有catch語句,只有finally語句。這種方式一定不能捕獲拋出的異常,程序會中斷,但是程序退出前finally語句會被強(qiáng)制執(zhí)行。往往try-finally語句會在以下場合使用:第13章Java應(yīng)用異常處理上述代碼中,try塊中使用throw關(guān)鍵字拋出異常后,并沒有馬上進(jìn)行捕獲,而是使用throws關(guān)鍵字進(jìn)行聲明,同時在try塊后聲明了finally語句。不管余額是否足夠,finally語句總是會被執(zhí)行。總的來說,try-finally語句可以結(jié)合throws關(guān)鍵字一起使用,用來強(qiáng)制執(zhí)行那些不管是否發(fā)生異常,都要執(zhí)行的處理。再次拋出異常在很多實際應(yīng)用代碼中,可以看到一些代碼在catch語句中捕獲了異常后,再次將異常使用throw關(guān)鍵字進(jìn)行拋出。如以下代碼:上述代碼中的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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度三人合伙開展物流倉儲服務(wù)合同
- 2024年店鋪分割財產(chǎn)分配協(xié)議
- 2024年廢窯廠坑塘土地租賃協(xié)議
- 2024年度0架AC3A直升機(jī)購銷協(xié)議
- 2024年度煤炭買賣合同(長協(xié))
- 2024水電安裝勞務(wù)分包合同范本
- 2024年度云計算服務(wù)與技術(shù)研發(fā)合同
- 2024年度新能源汽車銷售與服務(wù)分包合同
- 2024購買車輛合同范本
- 2024年度智能家居解決方案合同
- 2024至2030年中國巖土工程市場深度分析及發(fā)展趨勢研究報告
- 新版高血壓病人的護(hù)理培訓(xùn)課件
- 醫(yī)院等級創(chuàng)建工作匯報
- 2024年江西省公務(wù)員錄用考試《行測》題(網(wǎng)友回憶版)(題目及答案解析)
- VDA6.3基礎(chǔ)培訓(xùn)考核測試卷附答案
- 第01講 正數(shù)和負(fù)數(shù)、有理數(shù)-人教版新七年級《數(shù)學(xué)》暑假自學(xué)提升講義(解析版)
- 信息系統(tǒng)部署與運維-題庫帶答案
- 婚姻心理學(xué)解讀包含內(nèi)容
- DZ/T 0462.3-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第3部分:鐵、錳、鉻、釩、鈦(正式版)
- 備戰(zhàn)2024年高考英語考試易錯點12 名詞性從句(4大陷阱)(解析版)
- 公務(wù)員歷史常識100題及一套完整答案
評論
0/150
提交評論