




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第六章第六章 異常處理異常處理第六章第六章 異常處理異常處理6.1 6.1 異常的概念異常的概念v 何謂異常?何謂異常? 程序運(yùn)行時(shí),發(fā)生的各種錯(cuò)誤,稱為異常。程序運(yùn)行時(shí),發(fā)生的各種錯(cuò)誤,稱為異常。 用戶編制的程序如果無詞法和句法錯(cuò)誤,編譯時(shí)能順利通過,生成字節(jié)碼文件。用戶編制的程序如果無詞法和句法錯(cuò)誤,編譯時(shí)能順利通過,生成字節(jié)碼文件。但是,程序運(yùn)行時(shí),還可能發(fā)生各種錯(cuò)誤,例如:除數(shù)為但是,程序運(yùn)行時(shí),還可能發(fā)生各種錯(cuò)誤,例如:除數(shù)為0,數(shù)組越界,文件找,數(shù)組越界,文件找不到等,一旦發(fā)生這些錯(cuò)誤,通常阻止程序的正常運(yùn)行。不到等,一旦發(fā)生這些錯(cuò)誤,通常阻止程序的正常運(yùn)行。 java語言提供了異
2、常處理機(jī)制,程序運(yùn)行過程中,任何一個(gè)錯(cuò)誤發(fā)生時(shí),系統(tǒng)語言提供了異常處理機(jī)制,程序運(yùn)行過程中,任何一個(gè)錯(cuò)誤發(fā)生時(shí),系統(tǒng)都會(huì)找到與該錯(cuò)誤對應(yīng)的一個(gè)類,由該類產(chǎn)生一個(gè)錯(cuò)誤對象,通過錯(cuò)誤對象輸出都會(huì)找到與該錯(cuò)誤對應(yīng)的一個(gè)類,由該類產(chǎn)生一個(gè)錯(cuò)誤對象,通過錯(cuò)誤對象輸出 錯(cuò)誤發(fā)生原因的提示信息,幫助用戶迅速糾正錯(cuò)誤。錯(cuò)誤發(fā)生原因的提示信息,幫助用戶迅速糾正錯(cuò)誤。 例題:例題:exception.jpx Ex_Exception3.java6.2.1 6.2.1 異常處理機(jī)制異常處理機(jī)制v 何謂拋出異常?何謂拋出異常? 程序運(yùn)行時(shí),如果發(fā)生了某種錯(cuò)誤,系統(tǒng)中斷程序正常運(yùn)行,并且能迅程序運(yùn)行時(shí),如果發(fā)生了某種錯(cuò)
3、誤,系統(tǒng)中斷程序正常運(yùn)行,并且能迅速診斷出該錯(cuò)誤的類型,從系統(tǒng)已經(jīng)定義好的一組異常類中或用戶自定速診斷出該錯(cuò)誤的類型,從系統(tǒng)已經(jīng)定義好的一組異常類中或用戶自定義的一組異常類中找出對應(yīng)的異常類,生成一個(gè)異常類對象義的一組異常類中找出對應(yīng)的異常類,生成一個(gè)異常類對象 。 把錯(cuò)誤的產(chǎn)生、生成異常對象及提交給信息窗口的過程,稱為拋出異常。把錯(cuò)誤的產(chǎn)生、生成異常對象及提交給信息窗口的過程,稱為拋出異常。v 何謂捕獲異常?何謂捕獲異常? 拋出異常后,系統(tǒng)會(huì)從生成對象的代碼塊開始,沿方法的調(diào)用棧逐層拋出異常后,系統(tǒng)會(huì)從生成對象的代碼塊開始,沿方法的調(diào)用棧逐層回溯,尋找相應(yīng)的處理代碼,并把異常對象交給該方法處
4、理。這個(gè)過程回溯,尋找相應(yīng)的處理代碼,并把異常對象交給該方法處理。這個(gè)過程稱為捕獲異常。稱為捕獲異常。 這種異常處理機(jī)制這種異常處理機(jī)制將錯(cuò)誤處理代碼從常規(guī)代碼中分離出來。將錯(cuò)誤處理代碼從常規(guī)代碼中分離出來。 IgnoredException.java TestException1.java 第六章第六章 異常處理異常處理第六章第六章 異常處理異常處理6.2.1 6.2.1 異常的處理機(jī)制異常的處理機(jī)制v 舉例舉例【6-7】 模擬系統(tǒng)拋出異常和捕獲異常的過程。模擬系統(tǒng)拋出異常和捕獲異常的過程。 講解:程序運(yùn)行過程中,任何一個(gè)錯(cuò)誤發(fā)生時(shí),系統(tǒng)會(huì)找到與該錯(cuò)誤對講解:程序運(yùn)行過程中,任何一個(gè)錯(cuò)誤發(fā)生
5、時(shí),系統(tǒng)會(huì)找到與該錯(cuò)誤對應(yīng)的一個(gè)類,由該類產(chǎn)生一個(gè)異常對象,通過應(yīng)的一個(gè)類,由該類產(chǎn)生一個(gè)異常對象,通過throw 語句拋出該對象。語句拋出該對象。這時(shí)程序不再順序往下執(zhí)行,系統(tǒng)自動(dòng)尋找處理該異常對象的方法,找這時(shí)程序不再順序往下執(zhí)行,系統(tǒng)自動(dòng)尋找處理該異常對象的方法,找到該方法后,由該方法中的語句輸出錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤所發(fā)生的位到該方法后,由該方法中的語句輸出錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤所發(fā)生的位置。置。 第六章 異常處理6.1.2 6.1.2 異常的分類異常的分類 java語言制作了很多異常類,每個(gè)異常類都代表了一種運(yùn)行錯(cuò)誤,類語言制作了很多異常類,每個(gè)異常類都代表了一種運(yùn)行錯(cuò)誤,類中包含了該運(yùn)
6、行錯(cuò)誤的信息和處理錯(cuò)誤方法的方法等內(nèi)容。介紹圖表。中包含了該運(yùn)行錯(cuò)誤的信息和處理錯(cuò)誤方法的方法等內(nèi)容。介紹圖表。 每當(dāng)每當(dāng)java程序運(yùn)行過程中,發(fā)生了一個(gè)可識別的運(yùn)行錯(cuò)誤時(shí),即該錯(cuò)誤程序運(yùn)行過程中,發(fā)生了一個(gè)可識別的運(yùn)行錯(cuò)誤時(shí),即該錯(cuò)誤有一個(gè)異常類與之對應(yīng),系統(tǒng)都會(huì)產(chǎn)生一個(gè)相應(yīng)的該異常類的對象,即拋有一個(gè)異常類與之對應(yīng),系統(tǒng)都會(huì)產(chǎn)生一個(gè)相應(yīng)的該異常類的對象,即拋出異常。出異常。 然后再捕獲異常。即:系統(tǒng)自動(dòng)尋找處理該異常對象的方法,找到該方然后再捕獲異常。即:系統(tǒng)自動(dòng)尋找處理該異常對象的方法,找到該方法后,由該方法中的語句輸出錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤所發(fā)生的位置。法后,由該方法中的語句輸出錯(cuò)誤產(chǎn)
7、生的原因和錯(cuò)誤所發(fā)生的位置。 第六章 異常處理6.1.2 6.1.2 異常的分類異常的分類 java語言提供一組具有繼承關(guān)系的異常類。解釋圖:語言提供一組具有繼承關(guān)系的異常類。解釋圖: Throwable 類是所有處理異常類的根類,下面又可以分為兩種類型:類是所有處理異常類的根類,下面又可以分為兩種類型:(throwable 類有兩個(gè)直接子類:類有兩個(gè)直接子類:Error 類和類和 Exception類)類) Error 類及其子類所能處理的錯(cuò)誤一般都是系統(tǒng)內(nèi)部的錯(cuò)誤,當(dāng)這些錯(cuò)誤類及其子類所能處理的錯(cuò)誤一般都是系統(tǒng)內(nèi)部的錯(cuò)誤,當(dāng)這些錯(cuò)誤發(fā)生時(shí),程序?qū)⒔K止運(yùn)行發(fā)生時(shí),程序?qū)⒔K止運(yùn)行 (這類錯(cuò)誤通
8、常不是程序員責(zé)任這類錯(cuò)誤通常不是程序員責(zé)任) 。 比如:內(nèi)存溢出,動(dòng)態(tài)聯(lián)接錯(cuò)誤。當(dāng)程序運(yùn)行發(fā)生這種類型錯(cuò)誤時(shí),由比如:內(nèi)存溢出,動(dòng)態(tài)聯(lián)接錯(cuò)誤。當(dāng)程序運(yùn)行發(fā)生這種類型錯(cuò)誤時(shí),由java虛擬機(jī)捕獲這些錯(cuò)誤,并分析得到這些錯(cuò)誤發(fā)生的類型,從虛擬機(jī)捕獲這些錯(cuò)誤,并分析得到這些錯(cuò)誤發(fā)生的類型,從Error 類找類找出這組類中的對應(yīng)的類,產(chǎn)生異常對象并調(diào)用這些異常對象的方法,提供錯(cuò)出這組類中的對應(yīng)的類,產(chǎn)生異常對象并調(diào)用這些異常對象的方法,提供錯(cuò)誤發(fā)生原因的提示信息。誤發(fā)生原因的提示信息。 綜上所述,綜上所述,Error 類及其子類所處理的錯(cuò)誤,僅能提供錯(cuò)誤產(chǎn)生的原因,類及其子類所處理的錯(cuò)誤,僅能提供錯(cuò)誤
9、產(chǎn)生的原因,不能糾正程序中的錯(cuò)誤,恢復(fù)程序正常運(yùn)行。所以用戶對于這種類型的錯(cuò)誤,不能糾正程序中的錯(cuò)誤,恢復(fù)程序正常運(yùn)行。所以用戶對于這種類型的錯(cuò)誤,無須考慮如何糾正處理,完全交給無須考慮如何糾正處理,完全交給java虛擬機(jī)處理。虛擬機(jī)處理。第六章 異常處理6.1.2 6.1.2 異常的分類異常的分類 Exception 類及其子類所處理的錯(cuò)誤類型是可以糾正的錯(cuò)誤類及其子類所處理的錯(cuò)誤類型是可以糾正的錯(cuò)誤 (這類錯(cuò)誤通常是這類錯(cuò)誤通常是程序員編碼不當(dāng)造成的程序員編碼不當(dāng)造成的) 。 當(dāng)上述類型錯(cuò)誤發(fā)生時(shí),系統(tǒng)不僅能提供產(chǎn)生錯(cuò)誤的原因,如果用戶正確使用當(dāng)上述類型錯(cuò)誤發(fā)生時(shí),系統(tǒng)不僅能提供產(chǎn)生錯(cuò)誤的
10、原因,如果用戶正確使用try-catch-finally語句來處理這些錯(cuò)誤,還可以通過程序自身能糾正錯(cuò)誤,恢復(fù)程語句來處理這些錯(cuò)誤,還可以通過程序自身能糾正錯(cuò)誤,恢復(fù)程序正常運(yùn)行。序正常運(yùn)行。 把把Exception 類及其子類所處理的錯(cuò)誤類型分成兩種類型:類及其子類所處理的錯(cuò)誤類型分成兩種類型: (1)執(zhí)行異常(不受檢查型異常)執(zhí)行異常(不受檢查型異常) (2)檢查型異常)檢查型異常v 執(zhí)行異常執(zhí)行異常 IgnoredException.java Exception 類有一個(gè)直接子類,類有一個(gè)直接子類, RuntimeException 類。類。 RuntimeException類及子類所處
11、理的各種異常稱為執(zhí)行異常。類及子類所處理的各種異常稱為執(zhí)行異常。 該類所能處理的各種錯(cuò)誤類型,如圖所示:該類所能處理的各種錯(cuò)誤類型,如圖所示: 對程序中可能引起上述錯(cuò)誤的語句,編譯器在編譯時(shí)可以不對這些語句做檢查,對程序中可能引起上述錯(cuò)誤的語句,編譯器在編譯時(shí)可以不對這些語句做檢查,所以稱為非檢查型異常。所以稱為非檢查型異常。第六章 異常處理 RuntimeException 類及其子類介紹。類及其子類介紹。該類所能處理的錯(cuò)誤類型,如圖所示:該類所能處理的錯(cuò)誤類型,如圖所示:ArithmeticException算術(shù)錯(cuò)誤,如做整數(shù)除法時(shí),除數(shù)為算術(shù)錯(cuò)誤,如做整數(shù)除法時(shí),除數(shù)為0ArrayInd
12、exOutOfBoundsException數(shù)組下標(biāo)越界數(shù)組下標(biāo)越界ArrayStoreException數(shù)組元素賦值類型不兼容數(shù)組元素賦值類型不兼容NullPointException非法使用空引用非法使用空引用FileNotFoundException試圖存取一個(gè)并不存在的文件試圖存取一個(gè)并不存在的文件IOException通常的通常的I/O錯(cuò)誤錯(cuò)誤NegativeArraySizeException創(chuàng)建數(shù)組時(shí),如果數(shù)組元素個(gè)數(shù)是負(fù)數(shù)創(chuàng)建數(shù)組時(shí),如果數(shù)組元素個(gè)數(shù)是負(fù)數(shù)第六章 異常處理6.1.2 6.1.2 異常的分類異常的分類v RuntimeException 的子類對上述錯(cuò)誤的處理可以
13、采用兩種方式:的子類對上述錯(cuò)誤的處理可以采用兩種方式:(1)對程序中可能引起上述錯(cuò)誤的語句,用戶可以不使用)對程序中可能引起上述錯(cuò)誤的語句,用戶可以不使用try-catch-finally語句對這語句對這些可能引起錯(cuò)誤進(jìn)行處理,編譯能夠順利通過。但是,當(dāng)這些錯(cuò)誤發(fā)生時(shí),由些可能引起錯(cuò)誤進(jìn)行處理,編譯能夠順利通過。但是,當(dāng)這些錯(cuò)誤發(fā)生時(shí),由java虛擬機(jī)對這些錯(cuò)誤進(jìn)行監(jiān)測并處理,產(chǎn)生異常對象,在屏幕上提供錯(cuò)誤產(chǎn)生虛擬機(jī)對這些錯(cuò)誤進(jìn)行監(jiān)測并處理,產(chǎn)生異常對象,在屏幕上提供錯(cuò)誤產(chǎn)生的原因。的原因。 但是,由于用戶在程序中未編寫處理錯(cuò)誤的語句,所以當(dāng)錯(cuò)誤發(fā)生時(shí),程序自但是,由于用戶在程序中未編寫處理錯(cuò)
14、誤的語句,所以當(dāng)錯(cuò)誤發(fā)生時(shí),程序自身不能糾正錯(cuò)誤,恢復(fù)程序正常運(yùn)行。身不能糾正錯(cuò)誤,恢復(fù)程序正常運(yùn)行。(2)用戶正確使用)用戶正確使用try-catch-finally語句,不但編譯能夠順利通過,而且當(dāng)這些錯(cuò)誤語句,不但編譯能夠順利通過,而且當(dāng)這些錯(cuò)誤發(fā)生時(shí),能提供錯(cuò)誤發(fā)生的原因,并且通過程序自身能糾正錯(cuò)誤,恢復(fù)程序正常發(fā)生時(shí),能提供錯(cuò)誤發(fā)生的原因,并且通過程序自身能糾正錯(cuò)誤,恢復(fù)程序正常運(yùn)行。運(yùn)行。 如果用戶在程序中,對可能發(fā)生如果用戶在程序中,對可能發(fā)生RuntimeException 類及其子類所對應(yīng)錯(cuò)誤的類及其子類所對應(yīng)錯(cuò)誤的語句進(jìn)行處理,采用語句進(jìn)行處理,采用try和和catch語句
15、。把可能發(fā)生錯(cuò)誤的那些語句用語句。把可能發(fā)生錯(cuò)誤的那些語句用try 語句將其語句將其包圍起來,程序運(yùn)行時(shí)可能發(fā)生的異常語句將拋出異常對象,然后在包圍起來,程序運(yùn)行時(shí)可能發(fā)生的異常語句將拋出異常對象,然后在catch 塊語塊語句中進(jìn)行處理。句中進(jìn)行處理。第六章 異常處理6.1.2 6.1.2 異常的分類異常的分類vException 類的其他直接子類類的其他直接子類(非運(yùn)行時(shí)異常類非運(yùn)行時(shí)異常類): 該組類所處理的各種異常稱為檢查型異常。該組類所處理的各種異常稱為檢查型異常。 對程序中可能引起上述錯(cuò)誤的語句,編譯器在編譯時(shí),對這些語句必須做檢查,所以對程序中可能引起上述錯(cuò)誤的語句,編譯器在編譯時(shí)
16、,對這些語句必須做檢查,所以稱為檢查型異常。稱為檢查型異常。 如果編譯時(shí)發(fā)現(xiàn)有可能引起上述錯(cuò)誤的語句,而用戶未做任何處理,那么編譯將不如果編譯時(shí)發(fā)現(xiàn)有可能引起上述錯(cuò)誤的語句,而用戶未做任何處理,那么編譯將不能通過。能通過。 對這類錯(cuò)誤,用戶可以有兩種方式進(jìn)行處理:對這類錯(cuò)誤,用戶可以有兩種方式進(jìn)行處理: (1)采用)采用try-catch語句將可能引起這類錯(cuò)誤的語句包裝起來,如果用戶對語句將可能引起這類錯(cuò)誤的語句包裝起來,如果用戶對try-catch語句使用得當(dāng),當(dāng)這類錯(cuò)誤發(fā)生時(shí),不僅能發(fā)現(xiàn)錯(cuò)誤,還可以糾正錯(cuò)誤。語句使用得當(dāng),當(dāng)這類錯(cuò)誤發(fā)生時(shí),不僅能發(fā)現(xiàn)錯(cuò)誤,還可以糾正錯(cuò)誤。 (2)對可能引起
17、上述錯(cuò)誤的語句所在的方法聲明拋出異常語句,拋出這些錯(cuò)誤語句)對可能引起上述錯(cuò)誤的語句所在的方法聲明拋出異常語句,拋出這些錯(cuò)誤語句可能發(fā)生的異常種類。當(dāng)這類錯(cuò)誤發(fā)生時(shí),交由系統(tǒng)處理。這時(shí)系統(tǒng)僅能給出錯(cuò)誤提可能發(fā)生的異常種類。當(dāng)這類錯(cuò)誤發(fā)生時(shí),交由系統(tǒng)處理。這時(shí)系統(tǒng)僅能給出錯(cuò)誤提示信息,不能糾正錯(cuò)誤。示信息,不能糾正錯(cuò)誤。 從鍵盤上讀取數(shù)據(jù)從鍵盤上讀取數(shù)據(jù).jpx6.2.2 6.2.2 異常處理方法異常處理方法v trycatch的使用特點(diǎn):的使用特點(diǎn): (1) trycatch通常是配對使用。一個(gè)通常是配對使用。一個(gè)try語句至少有一個(gè)語句至少有一個(gè)catch語句與之語句與之配對。當(dāng)然一個(gè)配對。
18、當(dāng)然一個(gè)try可以有多個(gè)可以有多個(gè)catch與之配對。與之配對。try/ 希望進(jìn)行異常檢測的代碼塊希望進(jìn)行異常檢測的代碼塊/ 注意:此處不許插入其它語句,必須緊跟注意:此處不許插入其它語句,必須緊跟catchcatch(A e)/ 對異常對異常OneException.進(jìn)行處理進(jìn)行處理catch(B e)/ 對異常對異常AnotherException進(jìn)行處理進(jìn)行處理v 舉例:舉例:ExceptionSolution.java HelloWorldMod.java第六章 異常處理6.2.2 6.2.2 異常處理方法異常處理方法vtrycatch的使用特點(diǎn):的使用特點(diǎn): (1)在)在try語句限
19、定的范圍內(nèi)的任何一條語句,只要在運(yùn)行過程中發(fā)生了某種異常,語句限定的范圍內(nèi)的任何一條語句,只要在運(yùn)行過程中發(fā)生了某種異常,由系統(tǒng)控制拋出一個(gè)與之對應(yīng)的異常對象,且該語句下面的語句(由系統(tǒng)控制拋出一個(gè)與之對應(yīng)的異常對象,且該語句下面的語句( try語句限定的范圍語句限定的范圍內(nèi))不再執(zhí)行,系統(tǒng)將控制權(quán)由內(nèi))不再執(zhí)行,系統(tǒng)將控制權(quán)由try語句轉(zhuǎn)移到語句轉(zhuǎn)移到catch異常處理代碼塊。異常處理代碼塊。 如果如果catch語句指定的異常數(shù)據(jù)類型與系統(tǒng)拋出的異常對象的數(shù)據(jù)類型相符,系統(tǒng)拋語句指定的異常數(shù)據(jù)類型與系統(tǒng)拋出的異常對象的數(shù)據(jù)類型相符,系統(tǒng)拋出的異常對象將作為實(shí)際參數(shù)賦值給出的異常對象將作為實(shí)際
20、參數(shù)賦值給catch語句中的形參,然后順序執(zhí)行語句中的形參,然后順序執(zhí)行catch語句中語句中的內(nèi)容。的內(nèi)容。 反之,反之, catch語句指定的異常數(shù)據(jù)類型與系統(tǒng)拋出的異常對象的數(shù)據(jù)類型不符,捕語句指定的異常數(shù)據(jù)類型與系統(tǒng)拋出的異常對象的數(shù)據(jù)類型不符,捕獲異常失敗,程序執(zhí)行自動(dòng)終止,由系統(tǒng)控制輸出一個(gè)異常信息。獲異常失敗,程序執(zhí)行自動(dòng)終止,由系統(tǒng)控制輸出一個(gè)異常信息。 如果在如果在try語句限定的范圍內(nèi)的任何一條語句在運(yùn)行過程中未發(fā)生任何異常,語句限定的范圍內(nèi)的任何一條語句在運(yùn)行過程中未發(fā)生任何異常, catch語句塊中的內(nèi)容將被跳過。語句塊中的內(nèi)容將被跳過。 注意:注意: catch語句指
21、定的異常數(shù)據(jù)類型與系統(tǒng)拋出的異常對象的數(shù)據(jù)類型相符的含義語句指定的異常數(shù)據(jù)類型與系統(tǒng)拋出的異常對象的數(shù)據(jù)類型相符的含義是:是: catch語句的異常數(shù)據(jù)類型與異常對象的數(shù)據(jù)類型完全一致,或是語句的異常數(shù)據(jù)類型與異常對象的數(shù)據(jù)類型完全一致,或是catch語句指定語句指定的異常數(shù)據(jù)類型是異常對象的父類類型。的異常數(shù)據(jù)類型是異常對象的父類類型。第六章 異常處理6.2.2 6.2.2 異常處理方法異常處理方法 (2)一個(gè))一個(gè)try與多個(gè)與多個(gè)catch配對配對 在在try語句限定的范圍內(nèi)的任何一條語句,只要在運(yùn)行過程中發(fā)生語句限定的范圍內(nèi)的任何一條語句,只要在運(yùn)行過程中發(fā)生了某種異常,由系統(tǒng)控制拋出
22、一個(gè)與之對應(yīng)的異常對象,系統(tǒng)將控制了某種異常,由系統(tǒng)控制拋出一個(gè)與之對應(yīng)的異常對象,系統(tǒng)將控制權(quán)由權(quán)由try語句轉(zhuǎn)移到語句轉(zhuǎn)移到catch異常處理代碼塊。異常處理代碼塊。 然后從上至下逐個(gè)判定哪一個(gè)然后從上至下逐個(gè)判定哪一個(gè)catch語句中形參指定的數(shù)據(jù)類型與語句中形參指定的數(shù)據(jù)類型與系統(tǒng)拋出的異常對象的數(shù)據(jù)類型相符,如果找到相符的數(shù)據(jù)類型,就系統(tǒng)拋出的異常對象的數(shù)據(jù)類型相符,如果找到相符的數(shù)據(jù)類型,就會(huì)執(zhí)行這個(gè)會(huì)執(zhí)行這個(gè)catch語句塊中的內(nèi)容。否則,由系統(tǒng)控制輸出異常對象語句塊中的內(nèi)容。否則,由系統(tǒng)控制輸出異常對象的信息,且程序執(zhí)行自動(dòng)終止。的信息,且程序執(zhí)行自動(dòng)終止。 注意:多個(gè)注意:多
23、個(gè)catch語句的排列方式。一定要根據(jù)圖語句的排列方式。一定要根據(jù)圖6-1的層次結(jié)構(gòu)圖,的層次結(jié)構(gòu)圖,從子類到父類順序排列。否則,子類的從子類到父類順序排列。否則,子類的catch語句永遠(yuǎn)也執(zhí)行不到。語句永遠(yuǎn)也執(zhí)行不到。第六章 異常處理6.2.2 6.2.2 異常處理方法異常處理方法 (3)嵌套)嵌套trycatch語句語句 【例題例題 6-4】 兩對兩對trycatch語句的其中一對語句的其中一對trycatch語句放入另一對語句放入另一對trycatch語句中的語句中的try語句塊中,稱為嵌套語句塊中,稱為嵌套trycatch語句語句 。 內(nèi)部內(nèi)部try語句限定的范圍內(nèi)的任何一條語句發(fā)生了
24、某種異常,如果語句限定的范圍內(nèi)的任何一條語句發(fā)生了某種異常,如果沒有被內(nèi)部的沒有被內(nèi)部的catch語句塊所捕獲,那么就會(huì)傳到外部的語句塊所捕獲,那么就會(huì)傳到外部的catch語句語句塊中,由該塊中,由該catch語句捕獲異常對象。如果捕獲成功,就會(huì)執(zhí)行外部語句捕獲異常對象。如果捕獲成功,就會(huì)執(zhí)行外部的的catch語句塊中的內(nèi)容,否則系統(tǒng)控制輸出異常信息,程序執(zhí)行自語句塊中的內(nèi)容,否則系統(tǒng)控制輸出異常信息,程序執(zhí)行自動(dòng)終止。動(dòng)終止。第六章 異常處理Try塊與異常處理器A塊匹配嗎?與異常處理器B塊匹配嗎?異常處理器A異常處理器BFinally塊拋出一個(gè)異常信息操作正常是否是否6.2.2 6.2.2
25、異常處理方法異常處理方法v finally語句的使用特點(diǎn)語句的使用特點(diǎn): 一個(gè)一個(gè)try語句語句/一個(gè)或多個(gè)一個(gè)或多個(gè) catch語句語句/一個(gè)一個(gè) finally 語句語句 可以以這種組合方式來配套使用。其中可以以這種組合方式來配套使用。其中finally 語句不是必須的部分,語句不是必須的部分,可以有,也可以沒有??梢杂?,也可以沒有。 try catch(A e) finally /無論無論try語句是否拋出異常,都必須執(zhí)行的語句。語句是否拋出異常,都必須執(zhí)行的語句。 第六章 異常處理6.2.2 6.2.2 異常處理方法異常處理方法v finally語句的使用特點(diǎn):語句的使用特點(diǎn): 執(zhí)行過
26、程中,如果執(zhí)行過程中,如果try語句塊中的某個(gè)語句發(fā)生異常,首先執(zhí)行語句塊中的某個(gè)語句發(fā)生異常,首先執(zhí)行 catch語句塊的內(nèi)容,語句塊的內(nèi)容,然后執(zhí)行然后執(zhí)行 finally 語句塊中的內(nèi)容。語句塊中的內(nèi)容。 如果如果try語句塊中的某個(gè)語句未發(fā)生異常,直接執(zhí)行語句塊中的某個(gè)語句未發(fā)生異常,直接執(zhí)行finally 語句塊中的內(nèi)容。語句塊中的內(nèi)容。 因?yàn)闊o論因?yàn)闊o論try語句是否拋出異常,都必須執(zhí)行語句是否拋出異常,都必須執(zhí)行finally 語句塊中的內(nèi)容。因此,該語句語句塊中的內(nèi)容。因此,該語句塊中通常放入的內(nèi)容是:無論塊中通常放入的內(nèi)容是:無論try語句是否拋出異常都必須執(zhí)行的操作。語句是
27、否拋出異常都必須執(zhí)行的操作。 例如:打開一個(gè)文件或建立一個(gè)網(wǎng)絡(luò)連接,無論是正常操作結(jié)束,還是在操作過程例如:打開一個(gè)文件或建立一個(gè)網(wǎng)絡(luò)連接,無論是正常操作結(jié)束,還是在操作過程中發(fā)生了異常,都要關(guān)閉文件或斷開網(wǎng)絡(luò)連接。中發(fā)生了異常,都要關(guān)閉文件或斷開網(wǎng)絡(luò)連接。 因此,把關(guān)閉文件語句或斷開網(wǎng)絡(luò)連接語句一定要放入因此,把關(guān)閉文件語句或斷開網(wǎng)絡(luò)連接語句一定要放入finally 語句塊中。語句塊中。 其它放入其它放入finally 語句塊內(nèi)容:由于語句塊內(nèi)容:由于return、continue、break等語句使得控制權(quán)轉(zhuǎn)等語句使得控制權(quán)轉(zhuǎn)移到移到try語句塊之外,在控制權(quán)轉(zhuǎn)移到語句塊之外,在控制權(quán)轉(zhuǎn)移
28、到try語句塊外之前,仍然要要執(zhí)行語句塊外之前,仍然要要執(zhí)行finally 語句塊語句塊中的內(nèi)容。中的內(nèi)容。第六章 異常處理java.lang.Throwable類中與異常相關(guān)的方法類中與異常相關(guān)的方法 方 法描 述String getMessage()用來得到和列出錯(cuò)誤信息的文本String toString()輸出類名及與類有關(guān)的詳細(xì)信息String getLocalizedMessage()創(chuàng)建一個(gè)錯(cuò)誤或者異常的描述符,子類可以用來忽略消息并定制本方法使用的消息void printStackTrace()打印輸出從錯(cuò)誤點(diǎn)向上的堆棧信息StackTraceElement getStackT
29、race()返回由printStackTrace方法輸出的堆棧信息,為編程時(shí)訪問這些信息提供途徑void printStackTrace(PrintStream)打印輸出與指定打印流相關(guān)的堆棧信息void printStackTrace(PrintWriter)打印輸出相關(guān)的堆棧信息到指定位置Throwable fillInStackTrace()將該線程的堆棧狀態(tài)插入到異常對象中 6.2.2 6.2.2 異常處理方法異常處理方法v finally語句的使用特點(diǎn):語句的使用特點(diǎn): 由于異常一旦發(fā)生,就從發(fā)生點(diǎn)直接跳到相應(yīng)的異常處理器,由于異常一旦發(fā)生,就從發(fā)生點(diǎn)直接跳到相應(yīng)的異常處理器,而忽略掉而忽略掉try
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷藏合同范本
- 加工車間轉(zhuǎn)租合同范本
- 不見面簽訂租賃合同范本
- 2025年合肥貨運(yùn)車從業(yè)考試題
- 個(gè)人施工承攬合同范本
- app開發(fā)合同范本模板
- 加工訂單合同范本模板
- 農(nóng)村供熱服務(wù)合同范本
- 個(gè)人股權(quán)質(zhì)押合同范本
- 光租船合同范本
- GB/T 5392-2004林業(yè)機(jī)械油鋸技術(shù)條件
- GB/T 26535-2011國家重要濕地確定指標(biāo)
- GA/T 1133-2014基于視頻圖像的車輛行駛速度技術(shù)鑒定
- 食品安全 PPT課件7農(nóng)獸藥化學(xué)性污染對食品安全性的影響
- 世界電影史-全-課件
- 介入科人員崗位職責(zé)
- 病死畜禽無害化處理課件
- ncast課錄播系統(tǒng)簡介
- 華為認(rèn)證 HCIA-Security 安全 H12-711考試題庫(共800多題)
- 《區(qū)域大地構(gòu)造學(xué)》全套教學(xué)課件
- 接地電阻測試記錄表范本
評論
0/150
提交評論