《面向?qū)ο蟪绦蛟O(shè)計項目教程》課件 項目9 掌握異常處理_第1頁
《面向?qū)ο蟪绦蛟O(shè)計項目教程》課件 項目9 掌握異常處理_第2頁
《面向?qū)ο蟪绦蛟O(shè)計項目教程》課件 項目9 掌握異常處理_第3頁
《面向?qū)ο蟪绦蛟O(shè)計項目教程》課件 項目9 掌握異常處理_第4頁
《面向?qū)ο蟪绦蛟O(shè)計項目教程》課件 項目9 掌握異常處理_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

面向?qū)ο蟪绦蛟O(shè)計項目教程本章學(xué)習(xí)目標:●

理解異常的概念和異常處理機制●

理解Java異常的分類●

掌握try、catch、finally使用方法●

掌握throw、throws的使用方法●

掌握自定義異常的定義和使用方法項目9掌握異常處理任務(wù)1part

了解異常類Java提供了豐富的異常類,當(dāng)異常發(fā)生時,由運行時環(huán)境自動產(chǎn)生相應(yīng)異常類的對象保存相應(yīng)異常信息,這些異常類之間有嚴格的繼承關(guān)系。如圖9.1所示列舉了Java常見的異常類之間的繼承關(guān)系。1.1異常類Java中的異常類可以分為兩種:

(1)錯誤(Error):一般指與虛擬機相關(guān)的問題,如系統(tǒng)崩潰、虛擬機錯誤、動態(tài)鏈接失敗等,這些錯誤無法恢復(fù)或捕獲,將導(dǎo)致應(yīng)用程序中斷。

(2)異常(Exception):因程序編碼錯誤或外在因素導(dǎo)致的問題,這些問題能夠被系統(tǒng)捕獲并進行處理,從而避免應(yīng)用程序非正常中斷,例如:除以0、對負數(shù)開平方根、空指針訪問等。Throwable是所有異常類的父類,Error和Exception都繼承此類。當(dāng)程序產(chǎn)生Error時,因系統(tǒng)無法捕獲Error并處理,程序員將無能為力,程序只能中斷;而當(dāng)發(fā)生Exception時,系統(tǒng)可以捕獲并做出處理。1.1異常類Exception異常從編程角度又可以分為以下兩種類型:

(1)非檢查型異常:編譯器不要求強制處置的異常,該異常是因編碼或設(shè)計不當(dāng)導(dǎo)致的,這種異常可以避免,RuntimeException及其所有子類都屬于非檢查型異常。

(2)檢查型異常:編譯器要求及其子類必須處理的異常,該異常是程序運行時因外界因素而導(dǎo)致的,Exception及其子類(RuntimeException及其子類除外)都屬于檢查型異常。

常見的異常類說明如表9-1所示1.1異常類Java提供的異常處理機制有兩種:

(1)使用try…catch捕獲異常:將可能產(chǎn)生異常的代碼放在try語句中進行隔離,如果遇到異常,程序會停止執(zhí)行try塊的代碼,跳到catch塊中進行處理。

(2)使用throws聲明拋出異常:當(dāng)前方法不知道如何處理所出現(xiàn)的異常,該異常應(yīng)由上一級調(diào)用者進行處理,可在定義該方法時使用throws聲明拋出異常。Java的異常處理機制具有以下幾個優(yōu)點:

(1)異常處理代碼和正常的業(yè)務(wù)代碼分離,提高了程序的可讀性,簡化了程序的結(jié)構(gòu),保證了程序的健壯性。

(2)將不同類型的異常進行分類,不同情況的異常對應(yīng)不同的異常類,充分發(fā)揮類的可擴展性和可重用性的優(yōu)勢。

(3)可以對程序產(chǎn)生的異常進行靈活處理,如果當(dāng)前方法有能力處理異常,就使用try…catch捕獲并處理;否則使用throws聲明要拋出的異常,由該方法的上一級調(diào)用者來處理異常。1.2異常處理機制任務(wù)2part捕獲異常Java中捕獲異常并處理的語句有以下幾種:(1)try…catch語句(2)try…catch…finally語句(3)自動關(guān)閉資源的try語句(4)嵌套的try…catch語句(5)多異常捕獲捕獲異常捕獲異常2.1try…catch語句try…catch語句的基本語法格式如下:try{ //業(yè)務(wù)實現(xiàn)代碼(可能發(fā)生異常) ......}catch(異常類1異常對象){ //異常類1的處理代碼}catch(異常類2異常對象){ //異常類2的處理代碼}......//可以有多個catch語句catch(異常類n異常對象){ //異常類n的處理代碼}

其中:

(1)執(zhí)行try語句中的業(yè)務(wù)代碼出現(xiàn)異常時,系統(tǒng)會自動生成一個異常對象,該異常對象被提交給Java運行時環(huán)境,此過程稱為“拋出異?!保?/p>

(2)當(dāng)Java運行時環(huán)境收到異常對象時,會尋找能處理該異常對象的catch語句,即跟catch語句中的異常類型進行一一匹配,如果匹配成功,則執(zhí)行相應(yīng)的catch塊進行處理,這個過程稱為“捕獲異?!?;

(3)try語句后可以有一條或多條catch語句,這是針對不同的異常類提供不同的異常處理方式。2.1try…catch語句

所有異常對象都包含以下幾個常用方法用于訪問異常信息:

(1)getMessage()方法:返回該異常的詳細描述字符串;

(2)printStackTrace()方法:將該異常的跟蹤棧信息輸出到標準錯誤輸出;

(3)printStackTrace(PrintStreams)方法:將該異常的跟蹤棧信息輸出到指定輸出流;

(4)getStackTrace()方法:返回該異常的跟蹤棧信息。

2.2try...catch...finally語句try…catch…finally語句的語法格式如下:try{ //業(yè)務(wù)實現(xiàn)代碼(可能發(fā)生異常) ......}catch(異常類1異常對象){//異常類1的處理代碼

}catch(異常類2異常對象){//異常類2的處理代碼

}......//可以有多個catch語句catch(異常類n異常對象){//異常類n的處理代碼

}finally{//資源回收語句

}

其中:1、try塊是必需的,catch塊和finally塊是可選的,但catch塊和finally塊二者至少出現(xiàn)其一,也可以同時出現(xiàn),即有兩種形式的用法:try…finally和try…catch…finally。2、try…catch…finally是語句的順序不能顛倒,所有的catch塊必須位于try塊之后,finally塊必須位于所有的catch塊之后。2.3嵌套的try...catch語句

在某些時候,需要使用嵌套的try…catch語句。例如,代碼塊的某一部分產(chǎn)生一個異常,而整個代碼塊又有可能引起另外一個異常,此時需要將一個異常處理嵌套到另一個異常處理中。2.4多異常捕獲

在Java7以前,每個catch塊只能捕獲一種類型的異常。但從Java7開始,一個catch塊可以捕獲多種類型的異常。使用一個catch塊捕獲多種類型的異常時的語法格式如下:try{ //業(yè)務(wù)實現(xiàn)代碼(可能發(fā)生異常) ......}catch(異常類A[|異常類B...|異常類N]異常對象){ //多異常捕獲處理代碼}......//可以有多個catch語句其中:(1)捕獲多種類型的異常時,多種異常類型之間使用豎杠“|”進行間隔;(2)多異常捕獲時,異常變量默認是常量,因此程序不能對該異常變量重新賦值。任務(wù)3part拋出異常3.1throw拋出異常對象

在程序中,如果需要根據(jù)業(yè)務(wù)邏輯自行拋出異常,則應(yīng)該使用throw語句。throw語句拋出的不是異常類,而是一個異常實例對象,并且每次只能拋出一個異常實例對象。throw拋出異常對象的語法格式如下:throw異常對象

3.2throw聲明拋出異常序列throws聲明拋出異常序列的語法格式如下:[訪問符]<返回類型>方法名([參數(shù)列表])throws異常類A[,異常類B...,異常類N]{ //方法體}任務(wù)4part自定義異常

通常情況下,異常類直接或間接地繼承于類Exception,類Exception繼承于類Throwable,而類Throwable則直接繼承于類Object。當(dāng)只有一個對象是類Throwable或其子類的實例時,它才可以被Java虛擬機或throw語句拋出。

用戶自定義異常類都應(yīng)該繼承Exception基類或RuntimeException基類。定義異常類時通常需要提供兩個構(gòu)造方法:一個是無參數(shù)的構(gòu)造方法;另一個是帶一個字符串參數(shù)的構(gòu)造方法,這個字符串將作為該異常對象的描述信息(也就是異常對象的getMessage()方法的返回值)。

下述代碼定義了一個自定義異常類的基本格式,代碼如下所示。自定義異?!敬a9.10】AuctionException.javapackagecom;publicclassAuctionExceptionextendsException{ //無參數(shù)的構(gòu)造方法 publicAuctionException(){ } //帶一個字符串參數(shù)的構(gòu)造方法 publicAuctionException(Stringmsg){ super(msg); }}自

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論