




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第三部分異常處理第13章Java應(yīng)用異常處理異常概述異常指在程序運行的過程中,發(fā)生了某些意外的事件,如除以0、文件不存在等。如以下代碼:如果傳遞運行期參數(shù)0,那么div方法就進行了除以0的操作,是不正常的事件,將發(fā)生異常。異常并不是錯誤,只是一些不正常的事件,錯誤往往與源代碼的Bug或內(nèi)部環(huán)境有關(guān),如內(nèi)存泄露等。Java標準異常類型JavaAPI中提供了很多異常類及錯誤類,所有的異常類和錯誤類都繼承于java.lang.Throwable類,該類的所有子類對象都可以“被當成異常拋出”。Throwable類有兩個直接子類:Error類和Exception類。Error類表示錯誤,可能是編譯期錯誤或系統(tǒng)錯誤,往往在程序中并不處理。Exception類表示異常,是所有異常類的父類,是程序員所關(guān)心的。Exception類有很多子類,這些子類可以分為兩種類型。1.運行期異常Exception類有一個子類java.lang.RuntimeException,稱為運行期異常。RuntimeException類及其所有子類都被稱為運行期異常類。顧名思義,運行期異常是程序運行期拋出的異常,這些異常都由Java虛擬機自動拋出。如除數(shù)為0時,在程序運行期,Java虛擬機會拋出數(shù)學(xué)異常(ArithmeticException),數(shù)組索引越界時會拋出索引越界異常(ArrayIndexOutOfBoundsException),數(shù)字格式轉(zhuǎn)換出錯時會拋出數(shù)字格式異常(NumberFormatException)等。2.檢測異常除了RuntimeException類及其子類外,其他的異常類型都可以稱為檢測異常(CheckedException)。檢測異常是在程序中使用throw(相關(guān)內(nèi)容參考后續(xù)章節(jié))關(guān)鍵字拋出的異常,編譯器將強制處理這些異常。API中定義了大量的檢測異常,如IOException異常、SQLException異常等,java.io包中很多類的方法都拋出了IOException異?;蚱渥宇惍惓#瑯擞洸煌漠惓J录?。第13章Java應(yīng)用異常處理異常處理處理異常的作用是標記不正常的事件,如果拋出了異常卻不被處理,程序?qū)⒅袛?,不正常地退出。所以異常發(fā)生后,必須處理異常,保證程序按照不同的流程正常運行下去。Java中使用try、catch、finally語句處理異常。本節(jié)將詳細介紹異常處理語句的使用。1.trytry塊用來包含不正常的代碼,即可能發(fā)生異常的代碼塊。2.catchCatch塊必須緊跟在try塊之后,稱為捕獲異常,也就是異常處理函數(shù)。3.finallyfinally是異常處理中用來強制執(zhí)行某些代碼的語句。第13章Java應(yīng)用異常處理拋出異常運行期異常在運行時由Java虛擬機自動拋出,檢測異常必須在編譯期拋出,前面章節(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ù)邏輯中存在一些不正常事件流,而利用拋出異常來標記這些事件流,可以對這些事件流進行統(tǒng)一處理。如以下代碼:上述代碼中,Account類的取款(withdraw)方法,可能存在因余額不足而無法取款的不正常事件流,那么就可以使用拋出異常的方式來標記“余額不足”這個事件流。如果余額不足,使用throw語句拋出Exception類型的異常。而在throw語句處,將出現(xiàn)編譯錯誤,編譯器提醒,拋出異常后必須處理異常。這就是拋出異常的作用:能夠強制該異常被處理,因此異常所標記的事件流一定會被處理。如果不使用拋出異常的方式,而為withdraw方法提供不同返回值來標記不同事件流,那么程序員調(diào)用該方法時,可能會忽略“余額不足”的事件流。而使用拋出異常來標記“余額不足”后,編譯器將強制處理該異常,以保證該事件流不會被忽略。第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)鍵字進行比較及總結(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語句逐一進行捕獲,或者繼續(xù)使用throws關(guān)鍵字進行聲明。6.任何方法都可使用throws關(guān)鍵字任何方法都可以無條件地使用throws關(guān)鍵字聲明拋出任意類型的異常,抽象方法也可以。可以說,方法使用throws關(guān)鍵字聲明異常,在語法上沒有任何要求。7.方法覆蓋時對throws關(guān)鍵字的要求如果子類覆蓋父類的方法,子類的方法不能聲明拋出比父類方法更多的異常類型。第13章Java應(yīng)用異常處理try-finally的作用在前面章節(jié)中,曾提到try塊后可以沒有catch語句,只有finally語句。這種方式一定不能捕獲拋出的異常,程序會中斷,但是程序退出前finally語句會被強制執(zhí)行。往往try-finally語句會在以下場合使用:第13章Java應(yīng)用異常處理上述代碼中,try塊中使用throw關(guān)鍵字拋出異常后,并沒有馬上進行捕獲,而是使用throws關(guān)鍵字進行聲明,同時在try塊后聲明了finally語句。不管余額是否足夠,finally語句總是會被執(zhí)行。總的來說,try-finally語句可以結(jié)合throws關(guān)鍵字一起使用,用來強制執(zhí)行那些不管是否發(fā)生異常,都要執(zhí)行的處理。再次拋出異常在很多實際應(yīng)用代碼中,可以看到一些代碼在catch語句中捕獲了異常后,再次將異常使用throw關(guā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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西新余公開招聘農(nóng)村黨務(wù)(村務(wù))工作者筆試題含答案2024年
- AI技術(shù)在健康管理中的倫理挑戰(zhàn)及應(yīng)對策略
- 辦公健康管理中的醫(yī)療大數(shù)據(jù)應(yīng)用研究
- 健康管理的大數(shù)據(jù)解決方案
- 分布式金融系統(tǒng)在文化旅游的融合發(fā)展與創(chuàng)新研究
- 從實踐中學(xué)習(xí)醫(yī)療信息化的經(jīng)驗與教訓(xùn)分享
- 健康教育中的醫(yī)療資源分布與地理教學(xué)策略研究
- 辦公自動化與患者隱私保護的平衡之道
- 企業(yè)健康管理的醫(yī)療安全策略研究
- 產(chǎn)業(yè)互聯(lián)網(wǎng)下的區(qū)塊鏈技術(shù)應(yīng)用分析
- 防腐涂裝施工方案(22頁)
- 勞動關(guān)系管理法律實務(wù)案例題庫及答案(案例題)
- 2022年天津市中考道德與法治試題及答案解析
- 招商代理及運營管理服務(wù)合同(共9頁)
- 怎樣用PPT制作翻書效果
- 內(nèi)部控制風險評估報告模板
- 泵站課程設(shè)計(給水)
- 工程竣工照片檔案樣式01
- 福建省普通高等學(xué)校畢業(yè)生就業(yè)協(xié)議書A雙面打印
- 院校代表推廣手冊
- 連山易斷卦法(共60頁)
評論
0/150
提交評論