第7章 異常處理_第1頁(yè)
第7章 異常處理_第2頁(yè)
第7章 異常處理_第3頁(yè)
第7章 異常處理_第4頁(yè)
第7章 異常處理_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、7.17.1異常處理基礎(chǔ)異常處理基礎(chǔ)7.27.2異常處理異常處理7.37.3自定義異常類自定義異常類7.47.4案例分析與實(shí)現(xiàn)(續(xù)案例分析與實(shí)現(xiàn)(續(xù)4 4)第第7章章 異常處理異常處理本章教學(xué)內(nèi)容:本章教學(xué)內(nèi)容:本章教學(xué)目標(biāo):本章教學(xué)目標(biāo): 掌握異常的概念理解Java異常的分類掌握使用try、catch、finally捕獲異常的方法掌握throw、throws語(yǔ)句的用法掌握自定義異常類的方法7.1異常處理基礎(chǔ) 7.1.17.1.1異常概述異常概述1 1什么是異常什么是異常異常也稱為例外,是指在程序的運(yùn)行過(guò)程中所發(fā)生異常也稱為例外,是指在程序的運(yùn)行過(guò)程中所發(fā)生的一種事件,它會(huì)導(dǎo)致正常的程序流程中

2、斷。如:除數(shù)的一種事件,它會(huì)導(dǎo)致正常的程序流程中斷。如:除數(shù)為為0 0,數(shù)組越界,文件找不到等都屬于異常。,數(shù)組越界,文件找不到等都屬于異常。實(shí)例實(shí)例7-17-1除數(shù)為0,編譯通過(guò),運(yùn)行時(shí)引發(fā)異常。7.1.27.1.2異常類的層次異常類的層次在JDK中,每個(gè)包中都定義了異常類,而所有的異常類都直接或間接的繼承于Throwable類。 7.1.2異常類的層次異常類的層次 7.1.37.1.3異常分類異常分類從理論的角度,從理論的角度,JavaJava中的異常類可分為兩大類:中的異常類可分為兩大類: ErrorError(錯(cuò)誤):(錯(cuò)誤):描述了描述了JVMJVM系統(tǒng)的內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況

3、,系統(tǒng)的內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況, 這種錯(cuò)誤一般是由這種錯(cuò)誤一般是由JVMJVM拋出的,拋出的,JavaJava應(yīng)用程序不應(yīng)該處理這種異常應(yīng)用程序不應(yīng)該處理這種異常。ExceptionException(異常)(異常):因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問(wèn):因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問(wèn)題,例如:對(duì)負(fù)數(shù)開(kāi)平方根、空指針訪問(wèn)、試圖讀取不存在的文件題,例如:對(duì)負(fù)數(shù)開(kāi)平方根、空指針訪問(wèn)、試圖讀取不存在的文件、網(wǎng)絡(luò)連接中斷等。它包括非檢查型(、網(wǎng)絡(luò)連接中斷等。它包括非檢查型(uncheckedunchecked)異常和檢查型)異常和檢查型(checked)(checked)異常。異常

4、。非檢查型異常非檢查型異常 :繼承于:繼承于RuntimeExceptionRuntimeException類的類屬于非檢查型異常類的類屬于非檢查型異常。例如算數(shù)異常、數(shù)組下標(biāo)越界異常等。由于這些異常產(chǎn)生的位置。例如算數(shù)異常、數(shù)組下標(biāo)越界異常等。由于這些異常產(chǎn)生的位置是未知的,編譯器允許程序員在程序中不對(duì)它們作出處理。是未知的,編譯器允許程序員在程序中不對(duì)它們作出處理。檢查型異常檢查型異常 :該類異常是除了非檢查型異常之外,其他由:該類異常是除了非檢查型異常之外,其他由ExceptionException繼承來(lái)的異常類。編譯器要求在程序中必須處置該類異常。繼承來(lái)的異常類。編譯器要求在程序中必須

5、處置該類異常。7.2異常處理 7.2.17.2.1異常處理機(jī)制異常處理機(jī)制JavaJava語(yǔ)言提供兩種處理異常的機(jī)制:語(yǔ)言提供兩種處理異常的機(jī)制:捕獲異常捕獲異常 :在程序運(yùn)行過(guò)程中系統(tǒng)得到一個(gè)異常對(duì)象時(shí),它將會(huì)沿著方在程序運(yùn)行過(guò)程中系統(tǒng)得到一個(gè)異常對(duì)象時(shí),它將會(huì)沿著方法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼,當(dāng)找到能處理該類法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼,當(dāng)找到能處理該類型對(duì)象的代碼后,型對(duì)象的代碼后,JavaJava運(yùn)行環(huán)境就把當(dāng)前異常對(duì)象交給該代碼進(jìn)行處運(yùn)行環(huán)境就把當(dāng)前異常對(duì)象交給該代碼進(jìn)行處理,該過(guò)程稱為捕獲理,該過(guò)程稱為捕獲(catch)(catch)異常。這是一種積極

6、的異常處理機(jī)制。如異常。這是一種積極的異常處理機(jī)制。如果果JavaJava運(yùn)行環(huán)境找不到可以捕捉異常的代碼,則運(yùn)行環(huán)境將終止,相運(yùn)行環(huán)境找不到可以捕捉異常的代碼,則運(yùn)行環(huán)境將終止,相應(yīng)的應(yīng)的JavaJava程序也將退出。程序也將退出。 聲明拋出異常聲明拋出異常 :當(dāng)當(dāng)JavaJava運(yùn)行環(huán)境得到一個(gè)異常對(duì)象,如果當(dāng)前方法并運(yùn)行環(huán)境得到一個(gè)異常對(duì)象,如果當(dāng)前方法并不知道如何處理所出現(xiàn)的異常或者此時(shí)處理不合適,則可在定義方法不知道如何處理所出現(xiàn)的異常或者此時(shí)處理不合適,則可在定義方法時(shí),聲明拋出(時(shí),聲明拋出(throwsthrows)異常。)異常。 7.2.27.2.2捕獲異常捕獲異常實(shí)例實(shí)例7

7、-27-2算術(shù)異常測(cè)試舉例。public class ExceptionDemo2 public static void main(String args) / 0做除數(shù) try int a=0; int b = 5/a; System.out.println(結(jié)果是: +b); catch(ArithmeticException e) System.out.println(0做除數(shù)無(wú)意義!); e.printStackTrace(); 由由 try try、catch catch 與與 finally finally 三個(gè)關(guān)鍵字所組成的程序塊能夠捕三個(gè)關(guān)鍵字所組成的程序塊能夠捕獲異常,其中獲

8、異常,其中finallyfinally部分可以省略。其語(yǔ)法如下:部分可以省略。其語(yǔ)法如下:trytry / / 可能發(fā)生異常的代碼段可能發(fā)生異常的代碼段 catch (catch (異常類名異常類名 參變量名參變量名) ) / / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段 finally finally / / 不管有沒(méi)有異常總是要被執(zhí)行的代碼段不管有沒(méi)有異??偸且粓?zhí)行的代碼段 執(zhí)行流程:執(zhí)行流程:(1 1)try try 程序塊若是有異常發(fā)生時(shí),程序的運(yùn)行便中斷,程序塊若是有異常發(fā)生時(shí),程序的運(yùn)行便中斷,并拋出并拋出“異常類所產(chǎn)生的對(duì)象異常類所產(chǎn)生的對(duì)象”。(2 2)拋出的對(duì)象如果屬于

9、)拋出的對(duì)象如果屬于 catch()catch()括號(hào)內(nèi)欲捕獲的異常類括號(hào)內(nèi)欲捕獲的異常類,則,則 catch catch 會(huì)捕捉此異常,然后程序進(jìn)入到會(huì)捕捉此異常,然后程序進(jìn)入到 catch catch 塊里塊里繼續(xù)運(yùn)行。繼續(xù)運(yùn)行。(3 3)無(wú)論)無(wú)論 trytry塊是否有異常發(fā)生,或者捕捉到的異常是否塊是否有異常發(fā)生,或者捕捉到的異常是否與與 catch()catch()括號(hào)里的異常相同,最后一定會(huì)運(yùn)行括號(hào)里的異常相同,最后一定會(huì)運(yùn)行 finally finally 塊里的程序代碼。塊里的程序代碼。finally finally 的程序代碼塊運(yùn)行結(jié)束后,程序再回到的程序代碼塊運(yùn)行結(jié)束后,程

10、序再回到 try-try-catch-finally catch-finally 塊之后繼續(xù)執(zhí)行。塊之后繼續(xù)執(zhí)行。 2 2多重多重catchcatch處理異常處理異常語(yǔ)法格式如下:語(yǔ)法格式如下:try try / / 代碼段代碼段 catch ( catch (異常類型異常類型1 ex) 1 ex) / / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段 catch ( catch (異常類型異常類型2 ex) 2 ex) / / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段 catch ( catch (異常類型異常類型3 ex) 3 ex) / / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼

11、段 實(shí)例實(shí)例7-47-4多重catch處理異常示例。class MoreCatchDemo public static void main(String args) Scanner scanner = new Scanner(System.in);int a = new int2;try System.out.println(請(qǐng)輸入一個(gè)數(shù):);String str = scanner.next();/ 從鍵盤獲取一個(gè)字符串int num = Integer.parseInt(stra1 =10/ numa2 = num *5System.out.println(OK!); catch (Arr

12、ayIndexOutOfBoundsException ex) System.out.println(數(shù)組越界異常!); catch (NumberFormatException ex) System.out.println(數(shù)字轉(zhuǎn)換異常!); catch (Exception ex) System.out.println(其他異常!); 7.2.37.2.3聲明拋出異常聲明拋出異常1throws語(yǔ)句throws語(yǔ)句的格式如下: 返回值類型 方法名() throwsthrows ExceptionType1,ExceptionType2 / 方法體說(shuō)明:聲明拋出異常是在一個(gè)方法頭部由throw

13、s子句指明的;throws子句同時(shí)可以指明多個(gè)異常,之間由逗號(hào)隔開(kāi)。 2 2throwthrow語(yǔ)句語(yǔ)句拋出異常就是產(chǎn)生異常對(duì)象的過(guò)程。異?;蛘哂蓲伋霎惓>褪钱a(chǎn)生異常對(duì)象的過(guò)程。異?;蛘哂蒍VMJVM產(chǎn)生、產(chǎn)生、或者由某些類的實(shí)例生成,也可以在程序中生成。在方法或者由某些類的實(shí)例生成,也可以在程序中生成。在方法中,拋出異常是通過(guò)中,拋出異常是通過(guò)throwthrow語(yǔ)句實(shí)現(xiàn)的。語(yǔ)句實(shí)現(xiàn)的。實(shí)例實(shí)例7-6 throw7-6 throw語(yǔ)句應(yīng)用示例。語(yǔ)句應(yīng)用示例。實(shí)例實(shí)例7-7 throw7-7 throw和和throwsthrows語(yǔ)句的組合應(yīng)用示例。語(yǔ)句的組合應(yīng)用示例。7.3自定義異常類盡管Java本身提供了很多異常處理類,但是當(dāng)這些異常不能明確的說(shuō)明異常情況時(shí),開(kāi)發(fā)人員往往需要定義一些自己的異常類來(lái)描述自身程序中的異常信息,以區(qū)分其他程序的異常信息。這種情況下用戶只要定義一個(gè)直接或間接繼承Throwable的類就可以了。自定義異常類的主要作用是區(qū)分異常發(fā)生的位置,當(dāng)用戶遇到異常時(shí),根據(jù)異常名就可以知道哪里有異常,根據(jù)異常提示信息進(jìn)行修改。實(shí)例實(shí)例7-8 7-8 自定義一個(gè)繼承Exception類的異常類ZeroDivideException。實(shí)例實(shí)例7-9 7-9 自定義異常類的使用。7.4案例分析與實(shí)現(xiàn)(續(xù))1 1系統(tǒng)分析系統(tǒng)分析 啟動(dòng)系統(tǒng)后,用戶需要輸入菜單選項(xiàng),如果輸入

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論