版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第九章第九章 異常處理機(jī)制異常處理機(jī)制本章目標(biāo)本章目標(biāo)1. 理解掌握異常的概念與異常類的層次結(jié)構(gòu)理解掌握異常的概念與異常類的層次結(jié)構(gòu)2. 理解掌握異常的產(chǎn)生和常見的異常類理解掌握異常的產(chǎn)生和常見的異常類3. 理解掌握異常處理機(jī)制和理解掌握異常處理機(jī)制和try-catch-finally語句語句4. 掌握自定義異常類掌握自定義異常類第第9 9章章 異常處理機(jī)制異常處理機(jī)制學(xué)習(xí)指南學(xué)習(xí)指南仔細(xì)閱讀本章各知識(shí)點(diǎn)的內(nèi)容仔細(xì)閱讀本章各知識(shí)點(diǎn)的內(nèi)容, 深刻理深刻理解解 java 語言中獨(dú)特的例外處理機(jī)制,掌語言中獨(dú)特的例外處理機(jī)制,掌握處理問題的方法握處理問題的方法,多練習(xí),多上機(jī)多練習(xí),多上機(jī)異常處理機(jī)
2、制是異常處理機(jī)制是java語言處理程序錯(cuò)語言處理程序錯(cuò)誤的一種獨(dú)特的機(jī)制,也是誤的一種獨(dú)特的機(jī)制,也是java語言中語言中一個(gè)難點(diǎn)一個(gè)難點(diǎn)9.1 9.1 異常處理知識(shí)異常處理知識(shí)設(shè)計(jì)程序時(shí)產(chǎn)生錯(cuò)誤是不可避免的,一般計(jì)算機(jī)會(huì)設(shè)計(jì)程序時(shí)產(chǎn)生錯(cuò)誤是不可避免的,一般計(jì)算機(jī)會(huì)給出信息,但不提供善后處理給出信息,但不提供善后處理java引進(jìn)引進(jìn)異常處理機(jī)制異常處理機(jī)制,使用戶可以控制意外,提,使用戶可以控制意外,提供適當(dāng)?shù)奶幚恚瑥亩蟠筇岣吡塑浖目煽啃怨┻m當(dāng)?shù)奶幚?,從而大大提高了軟件的可靠?9.1.1 錯(cuò)誤錯(cuò)誤程序錯(cuò)誤有三種:程序錯(cuò)誤有三種:編譯錯(cuò)誤編譯錯(cuò)誤運(yùn)行錯(cuò)誤運(yùn)行錯(cuò)誤邏輯錯(cuò)誤邏輯錯(cuò)誤9.1 9.
3、1 異常處理知識(shí)異常處理知識(shí)1. 編譯錯(cuò)誤編譯錯(cuò)誤 在編譯程序時(shí)產(chǎn)生錯(cuò)誤在編譯程序時(shí)產(chǎn)生錯(cuò)誤 沒有編譯錯(cuò)誤是每個(gè)程序可正常運(yùn)行的基本條件,因?yàn)闆]有編譯錯(cuò)誤是每個(gè)程序可正常運(yùn)行的基本條件,因?yàn)橹挥芯幾g錯(cuò)誤改正后,程序才被編譯為目標(biāo)代碼或字節(jié)只有編譯錯(cuò)誤改正后,程序才被編譯為目標(biāo)代碼或字節(jié)碼碼2. 邏輯錯(cuò)誤邏輯錯(cuò)誤 指程序不能按預(yù)期的方案執(zhí)行,機(jī)器本身無法檢測(cè),需指程序不能按預(yù)期的方案執(zhí)行,機(jī)器本身無法檢測(cè),需人工對(duì)運(yùn)行結(jié)果人工對(duì)運(yùn)行結(jié)果 及程序邏輯進(jìn)行分析,找出錯(cuò)誤原因及程序邏輯進(jìn)行分析,找出錯(cuò)誤原因3. 運(yùn)行錯(cuò)誤運(yùn)行錯(cuò)誤 程序在運(yùn)行中產(chǎn)生的錯(cuò)誤,這類錯(cuò)誤可能來自程序員沒程序在運(yùn)行中產(chǎn)生的錯(cuò)誤,
4、這類錯(cuò)誤可能來自程序員沒有預(yù)料到的各種情況,或者超出程序員控制的各種因素有預(yù)料到的各種情況,或者超出程序員控制的各種因素9.1 9.1 異常處理知識(shí)異常處理知識(shí) 異常異常(exception)是特殊的運(yùn)行錯(cuò)誤是特殊的運(yùn)行錯(cuò)誤 其定義是:在程序執(zhí)行的時(shí)候,所發(fā)生的會(huì)中斷程其定義是:在程序執(zhí)行的時(shí)候,所發(fā)生的會(huì)中斷程序正常執(zhí)行的錯(cuò)誤。序正常執(zhí)行的錯(cuò)誤。 如除如除0、溢出、數(shù)組下標(biāo)越界、不能打開指定的文、溢出、數(shù)組下標(biāo)越界、不能打開指定的文件等。件等。9.1 9.1 異常處理知識(shí)異常處理知識(shí)異常類異常類 Java的異常類是處理運(yùn)行錯(cuò)誤的特殊類,每一種異的異常類是處理運(yùn)行錯(cuò)誤的特殊類,每一種異常類都對(duì)
5、應(yīng)一種特定的運(yùn)行錯(cuò)誤(異常),一旦程常類都對(duì)應(yīng)一種特定的運(yùn)行錯(cuò)誤(異常),一旦程序運(yùn)行中出現(xiàn)異常,運(yùn)行時(shí)系統(tǒng)會(huì)產(chǎn)生一個(gè)相應(yīng)異序運(yùn)行中出現(xiàn)異常,運(yùn)行時(shí)系統(tǒng)會(huì)產(chǎn)生一個(gè)相應(yīng)異常類對(duì)象。常類對(duì)象。 Java通過系統(tǒng)類庫中的通過系統(tǒng)類庫中的Error類和類和Exception類及其大類及其大量的子類來描述異常,它們都是量的子類來描述異常,它們都是Throwable類的子類。類的子類。9.1 9.1 異常處理知識(shí)異常處理知識(shí)異常類異常類Error類類該類所描述的異常對(duì)象是由該類所描述的異常對(duì)象是由Java虛擬機(jī)生產(chǎn)并拋給虛擬機(jī)生產(chǎn)并拋給 系統(tǒng),如內(nèi)存溢出,鏈接錯(cuò)誤等,一般系統(tǒng),如內(nèi)存溢出,鏈接錯(cuò)誤等,一般
6、 Java程序不程序不 對(duì)這類運(yùn)行錯(cuò)誤進(jìn)行處理,直接交給運(yùn)對(duì)這類運(yùn)行錯(cuò)誤進(jìn)行處理,直接交給運(yùn) 行時(shí)系統(tǒng)處行時(shí)系統(tǒng)處理。理。Exception類類它的各種不同的子類分別對(duì)應(yīng)著不同的異常類型,它的各種不同的子類分別對(duì)應(yīng)著不同的異常類型, 如,除數(shù)為如,除數(shù)為0、數(shù)組下標(biāo)越界等運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤,、數(shù)組下標(biāo)越界等運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤, 每種異常對(duì)象(描述運(yùn)行錯(cuò)誤的對(duì)象)每種異常對(duì)象(描述運(yùn)行錯(cuò)誤的對(duì)象) 都對(duì)應(yīng)著都對(duì)應(yīng)著 一個(gè)異常類。一個(gè)異常類。異常處理機(jī)制異常處理機(jī)制當(dāng)方法執(zhí)行過程中出現(xiàn)錯(cuò)誤而干擾了程序流程時(shí),會(huì)拋出一個(gè)異當(dāng)方法執(zhí)行過程中出現(xiàn)錯(cuò)誤而干擾了程序流程時(shí),會(huì)拋出一個(gè)異常,即構(gòu)造出一個(gè)異常類的對(duì)
7、象。常,即構(gòu)造出一個(gè)異常類的對(duì)象。異常類對(duì)象代表當(dāng)前出現(xiàn)的一個(gè)具體異常,該對(duì)象封裝了異常的異常類對(duì)象代表當(dāng)前出現(xiàn)的一個(gè)具體異常,該對(duì)象封裝了異常的有關(guān)信息。有關(guān)信息。異常分為系統(tǒng)定義異常和用戶自定義異常。異常分為系統(tǒng)定義異常和用戶自定義異常。異常拋出方式:異常拋出方式: 自動(dòng)拋出(系統(tǒng)定義異常)自動(dòng)拋出(系統(tǒng)定義異常) 用用throw語句拋出(用戶定義異常)語句拋出(用戶定義異常)方法中的異常處理:方法中的異常處理: 捕獲異常,就地解決,并使程序繼續(xù)執(zhí)行捕獲異常,就地解決,并使程序繼續(xù)執(zhí)行 。 將異常向外轉(zhuǎn)移,即將異常拋出方法之外,由調(diào)用該方法的將異常向外轉(zhuǎn)移,即將異常拋出方法之外,由調(diào)用該方
8、法的環(huán)境去處理。環(huán)境去處理。異常的產(chǎn)生異常的產(chǎn)生public class ExceptionArry public static void main (String args) int index=0; int a_array = 1,2,3,4,5; for(index=0;index=5;index+) prt(a+index+=+a_arrayindex); prt(the end); public static void prt(String s) System.out.println(s); 【例【例9-1】數(shù)組下標(biāo)越界】數(shù)組下標(biāo)越界 異常的產(chǎn)生異常的產(chǎn)生【例【例9-1】數(shù)組下標(biāo)越界
9、】數(shù)組下標(biāo)越界 異常處理機(jī)制異常處理機(jī)制Java的異常處理機(jī)制是通過面向?qū)ο蟮姆椒ㄌ幚淼漠惓L幚頇C(jī)制是通過面向?qū)ο蟮姆椒ㄌ幚懋惓.惓R灰粧伋霎惓伋霎惓.?dāng)程序發(fā)生異常時(shí),不能正常執(zhí)行,稱為當(dāng)程序發(fā)生異常時(shí),不能正常執(zhí)行,稱為“拋拋出出(throw)”一個(gè)異常;一個(gè)異常;一個(gè)異??梢杂梢粋€(gè)異??梢杂蒵vm自動(dòng)生成,也可以由程序自動(dòng)生成,也可以由程序中的方法產(chǎn)生中的方法產(chǎn)生異常對(duì)象包含了錯(cuò)誤類型與相應(yīng)的錯(cuò)誤信息異常對(duì)象包含了錯(cuò)誤類型與相應(yīng)的錯(cuò)誤信息二二處理異常處理異常Java在異常處理機(jī)制中使用在異常處理機(jī)制中使用 try-catch-finally語句語句來捕獲處理來捕獲處理 一個(gè)或多個(gè)異常對(duì)象
10、,語法格式:一個(gè)或多個(gè)異常對(duì)象,語法格式:try 可能發(fā)生錯(cuò)誤的代碼;可能發(fā)生錯(cuò)誤的代碼;catch(Exception e) 錯(cuò)誤處理代碼;錯(cuò)誤處理代碼;finally 最后要執(zhí)行的代碼;最后要執(zhí)行的代碼;try-catch-finally語句語句try 可能產(chǎn)生異常的代碼可能產(chǎn)生異常的代碼; catch (exceptiontype1 e) 異常異常 e的處理語句的處理語句 catch (exceptiontype2 e) 異常異常 e的處理語句的處理語句 catch (exceptiontype3 e) 異常異常 e的處理語句的處理語句 finally 最終的處理最終的處理 【例【例9-
11、3】產(chǎn)生被零除異常產(chǎn)生被零除異常public class ExceptDivideByZero public static void main(String args) int i, j = 0; i = 3 / j; /除運(yùn)算,產(chǎn)生被除運(yùn)算,產(chǎn)生被0除異常除異常 System.out.println(End); 【例【例9-4】使用】使用try-catch-finally處理被零除異常處理被零除異常 public class CatchExceptDivideByZero public static void main(String args) try int i, j = 0; i = 3
12、 / j; /可能產(chǎn)生異常的語句置于可能產(chǎn)生異常的語句置于try子句子句 catch(ArithmeticException e) /捕獲算術(shù)異常捕獲算術(shù)異常 System.out.println(發(fā)生被零除異常發(fā)生被零除異常.); finally /無論是否發(fā)生異常都要執(zhí)行該子句無論是否發(fā)生異常都要執(zhí)行該子句 System.out.println(nEnd!); System.out.println(n程序繼續(xù)執(zhí)行,可正常結(jié)束!程序繼續(xù)執(zhí)行,可正常結(jié)束!); public class Try2 public static void main (String args) int i=0; in
13、t a = 5,6,7,8; for(i=0;i5;i+) try System.out.print(a+i+/+i+=+(ai/i); catch(ArrayIndexOutOfBoundsException e) System.out.print(捕獲數(shù)組下標(biāo)越界異常捕獲數(shù)組下標(biāo)越界異常!); catch(ArithmeticException e) System.out.print(捕獲算術(shù)異常捕獲算術(shù)異常!); catch(Exception e) System.out.print(捕獲捕獲+e.getMessage()+異常異常!); finally System.out.print
14、ln( finally i=+i); System.out.println(繼續(xù)繼續(xù)!); 【例【例9-5】使用】使用try-catch-finally捕獲多個(gè)異常捕獲多個(gè)異常 當(dāng)產(chǎn)生異常對(duì)象時(shí),從第一個(gè)當(dāng)產(chǎn)生異常對(duì)象時(shí),從第一個(gè)catch子句開始子句開始匹配,直到向下找到一個(gè)可匹配的子句,剩下匹配,直到向下找到一個(gè)可匹配的子句,剩下的的catch語句就語句就不再進(jìn)行匹配不再進(jìn)行匹配也就是捕獲子類異常的也就是捕獲子類異常的catch語句在前,捕語句在前,捕獲超類異常的獲超類異常的catch語句在后。語句在后。 注意:注意: finally子句為異常處理提供一個(gè)統(tǒng)一的出口,子句為異常處理提供一個(gè)
15、統(tǒng)一的出口,無論無論try語句是否產(chǎn)生異常,都將執(zhí)行語句是否產(chǎn)生異常,都將執(zhí)行finally子子句;句; 當(dāng)當(dāng)try子句中的語句產(chǎn)生異常時(shí),其后面的語子句中的語句產(chǎn)生異常時(shí),其后面的語句將無法執(zhí)行,在編程時(shí)可以把這部分代碼放句將無法執(zhí)行,在編程時(shí)可以把這部分代碼放在在finally子句的語句塊中,以保證程序能正常子句的語句塊中,以保證程序能正常執(zhí)行或正常退出執(zhí)行或正常退出 同時(shí),同時(shí),finally子句應(yīng)該包含用于釋放在子句應(yīng)該包含用于釋放在try語句語句塊中所獲取的資源的代碼,如,塊中所獲取的資源的代碼,如,finally子句應(yīng)子句應(yīng)該關(guān)閉在該關(guān)閉在try子句中打開的所有的文件子句中打開的所
16、有的文件 當(dāng)然也可以缺省當(dāng)然也可以缺省finally子句子句注意:注意:9.3 9.3 異常的分類異常的分類二二程序?qū)﹀e(cuò)誤與異常處理的三種方式程序?qū)﹀e(cuò)誤與異常處理的三種方式1.程序不能處理的錯(cuò)誤程序不能處理的錯(cuò)誤Error類為錯(cuò)誤類,如內(nèi)存溢出等,這類錯(cuò)誤一般類為錯(cuò)誤類,如內(nèi)存溢出等,這類錯(cuò)誤一般由系統(tǒng)處理;由系統(tǒng)處理;Error類處理的是運(yùn)行使系統(tǒng)發(fā)生的類處理的是運(yùn)行使系統(tǒng)發(fā)生的內(nèi)部錯(cuò)誤,是不可恢復(fù)的,唯一的辦法是終止運(yùn)行內(nèi)部錯(cuò)誤,是不可恢復(fù)的,唯一的辦法是終止運(yùn)行程序;程序; 2.程序應(yīng)避免異常,而不是主動(dòng)去捕獲異常程序應(yīng)避免異常,而不是主動(dòng)去捕獲異常如數(shù)組越界,在正常的程序設(shè)計(jì)中是可以避
17、免的,如數(shù)組越界,在正常的程序設(shè)計(jì)中是可以避免的,如編程時(shí)可以利用數(shù)組長度如編程時(shí)可以利用數(shù)組長度a.length來控制程序,無來控制程序,無須使用須使用try-catch-finally去處理去處理在設(shè)計(jì)程序中,應(yīng)避免這類錯(cuò)誤在設(shè)計(jì)程序中,應(yīng)避免這類錯(cuò)誤9.3 9.3 異常的分類異常的分類二二程序?qū)﹀e(cuò)誤與異常處理的三種方式程序?qū)﹀e(cuò)誤與異常處理的三種方式3.必須捕獲的異常必須捕獲的異常有些異常在編寫程序時(shí)是沒法預(yù)料的,如文件沒找有些異常在編寫程序時(shí)是沒法預(yù)料的,如文件沒找到,網(wǎng)絡(luò)連接失敗等,為了保證程序的健壯性,到,網(wǎng)絡(luò)連接失敗等,為了保證程序的健壯性,java要求必須對(duì)這些可能出現(xiàn)異常的代碼
18、使用要求必須對(duì)這些可能出現(xiàn)異常的代碼使用java異常處理機(jī)制進(jìn)行處理異常處理機(jī)制進(jìn)行處理如,例如,例9.3 文件未找到異常文件未找到異常 import java.io.*;public class Try3 public static void main (String args) FileInputStream fis = new FileInputStream(autoexec.bat); System.out.println(I can not found this file!); 例例9.3 文件未找到異常文件未找到異常修改為:修改為:import java.io.*;public c
19、lass Try3 public static void main (String args) try FileInputStream fis = new FileInputStream(autoexec.bat); catch(Exception e) System.out.println(I can not found this file!); Exception類定義的是較輕的錯(cuò)誤,你可以編寫代碼來處理這類錯(cuò)誤,并繼續(xù)程序的執(zhí)行。 Exception原因: 打開的文件不存在。 網(wǎng)絡(luò)連接中斷。 操作數(shù)超過允許范圍。 想要加載的類文件不存在。 試圖通過空的引用型變量訪問對(duì)象。 數(shù)組下標(biāo)越界。
20、 Error類定義的錯(cuò)誤是致命性錯(cuò)誤,一般會(huì)導(dǎo)致程序停止執(zhí)行。常見的公用異常類常見的公用異常類 介紹常見的異常類,它們都是介紹常見的異常類,它們都是RuntimeException的子類的子類1. ArithmeticException-算術(shù)異常算術(shù)異常 如果除數(shù)為如果除數(shù)為0或被或被0取模產(chǎn)生該異常取模產(chǎn)生該異常2. NullPointerException 數(shù)據(jù)未初始化異常數(shù)據(jù)未初始化異常 如果程序試圖訪問一個(gè)空對(duì)象的變量與方法,或一個(gè)如果程序試圖訪問一個(gè)空對(duì)象的變量與方法,或一個(gè)空數(shù)組的元素時(shí),產(chǎn)生該異常,如空數(shù)組的元素時(shí),產(chǎn)生該異常,如 int a=null; a0=0; /訪問長度為
21、訪問長度為0的數(shù)組,產(chǎn)生異常的數(shù)組,產(chǎn)生異常 String str=null; System.out.println(str.length(); /產(chǎn)生異常產(chǎn)生異常常見的公用異常類常見的公用異常類3. ClassCastException-強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換 無法強(qiáng)制類型轉(zhuǎn)換的操作,在進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí)會(huì)無法強(qiáng)制類型轉(zhuǎn)換的操作,在進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí)會(huì)出現(xiàn)此異常,如出現(xiàn)此異常,如Object obj=new Object();String str= (String) obj; 對(duì)象對(duì)象obj不能強(qiáng)制轉(zhuǎn)換為不能強(qiáng)制轉(zhuǎn)換為String ,產(chǎn)生該異常,產(chǎn)生該異常4. ArrayIndexOutO
22、fBandsException數(shù)組下標(biāo)越界數(shù)組下標(biāo)越界 試圖訪問數(shù)組中不不存在的元素時(shí),引發(fā)該異常,如試圖訪問數(shù)組中不不存在的元素時(shí),引發(fā)該異常,如 int a=new int1; a0=0; a1=1; /下標(biāo)越界,產(chǎn)生異常下標(biāo)越界,產(chǎn)生異常常見的公用異常類常見的公用異常類5. NegativeArraySizeException數(shù)組負(fù)下標(biāo)越界數(shù)組負(fù)下標(biāo)越界 如果一個(gè)數(shù)組的長度是負(fù)數(shù),則產(chǎn)生異常,如如果一個(gè)數(shù)組的長度是負(fù)數(shù),則產(chǎn)生異常,如int a=new int-1; /數(shù)組長度不能為負(fù),產(chǎn)生異常數(shù)組長度不能為負(fù),產(chǎn)生異常以下為常見的非以下為常見的非RuntimeException的子類的
23、子類系統(tǒng)定義的異常類2.ClassNotFoundException 未找到要加載的類3.IOException 輸入、輸出錯(cuò)誤4.InterruptedException 一線程在睡眠、等待或其他原因暫停時(shí)被其他線程打斷5.UnknownHostException 無法確定主機(jī)的IP地址6.SecurityException 安全性錯(cuò)誤,如Applet欲讀寫文件7.MalformedURLException URL格式錯(cuò)誤系統(tǒng)將常見錯(cuò)誤預(yù)定義為若干異常類當(dāng)出現(xiàn)異常時(shí)自動(dòng)拋出1.FileNotFoundException-文件或目錄未找到到異常文件或目錄未找到到異常 如果程序中使用FileIn
24、putStream類,在訪問的文件不存在時(shí)會(huì)產(chǎn)生此異常Exception類 構(gòu)造函數(shù) Exception() Exception(String 異常描述) 方法 String getMessage() 返回異常描述。 String toString() 返回異常對(duì)象詳細(xì)信息。 void printStackTrace() 打印異常發(fā)生的路徑,即引起異常的方法調(diào)用嵌套序列。9.4 9.4 拋出異常類拋出異常類在異常處理機(jī)制中,在異常處理機(jī)制中, try語句必須有代碼產(chǎn)生一個(gè)異常對(duì)語句必須有代碼產(chǎn)生一個(gè)異常對(duì)象并把它拋出象并把它拋出, catch語句捕獲一個(gè)異常對(duì)象。語句捕獲一個(gè)異常對(duì)象。而拋出異
25、常對(duì)象,即可以是而拋出異常對(duì)象,即可以是java運(yùn)行時(shí)系統(tǒng)異常運(yùn)行時(shí)系統(tǒng)異常;也可以是程序員自己編寫的代碼也可以是程序員自己編寫的代碼;1.使用使用throw語句拋出異常語句拋出異常throw拋出異常的格式如下:拋出異常的格式如下:throw ;其中,其中,throw是關(guān)鍵字,異常對(duì)象是創(chuàng)建的異常類對(duì)象是關(guān)鍵字,異常對(duì)象是創(chuàng)建的異常類對(duì)象通過例子來說明通過例子來說明throw的使用的使用9.4 9.4 拋出異常類拋出異常類 if (i0)throw new Exception(over boounds); System.out.println(產(chǎn)生異常!產(chǎn)生異常!); 9.4 9.4 拋出異常
26、拋出異常2.拋出異常的方法與調(diào)用異常的方法處理異常拋出異常的方法與調(diào)用異常的方法處理異常在前面的例子中都是,異常的處理都是在拋出異常的在前面的例子中都是,異常的處理都是在拋出異常的方法在來處理,也就是異常的拋出與處理在同一個(gè)方方法在來處理,也就是異常的拋出與處理在同一個(gè)方法中;法中;在實(shí)際的編程中,一個(gè)方法并不需要處理它所產(chǎn)生的在實(shí)際的編程中,一個(gè)方法并不需要處理它所產(chǎn)生的異常,而是向上傳遞,由調(diào)用它的方法處理異常;異常,而是向上傳遞,由調(diào)用它的方法處理異常;那么與異常有關(guān)的就有兩個(gè)方法:那么與異常有關(guān)的就有兩個(gè)方法:拋出異常的方法;拋出異常的方法;處理異常的方法處理異常的方法9.4 9.4
27、拋出異常拋出異常 拋出異常的方法拋出異常的方法如果在一個(gè)方法中產(chǎn)生異常并不處理,那么就需要使用throws語句,用來拋出所產(chǎn)生的異常;帶有throws語句的方法聲明如下:返回類型返回類型 方法名方法名(參數(shù)列表參數(shù)列表) throws 異常類列表異常類列表; 其中,其中, throws是關(guān)鍵字,是關(guān)鍵字,異常類列表中異常類列表中可以有多個(gè)異可以有多個(gè)異常類,用逗號(hào)隔開;常類,用逗號(hào)隔開;拋出異常的方法并不處理異常,拋出異常的方法并不處理異常,注意注意: throw與與throws 在語義與用法的區(qū)別在語義與用法的區(qū)別9.4 9.4 拋出異常類拋出異常類public class Tspublic
28、 void go(int i) throws Exceptionif (i0)throw new Exception(over boounds);System.out.println(產(chǎn)生異常!產(chǎn)生異常!);public static void main(String args) Ts x=newTs(); tryx.go(10); catch(Exception e) System.out.println(e.toString(); 9.5 9.5 自定義異常類自定義異常類由于程序的復(fù)雜性,由于程序的復(fù)雜性,Java系統(tǒng)雖然已經(jīng)定義了很多異常類,系統(tǒng)雖然已經(jīng)定義了很多異常類,但有些情況下程序
29、員必須自己定義那些未被系統(tǒng)定義的異常;但有些情況下程序員必須自己定義那些未被系統(tǒng)定義的異常;程序員可通過程序員可通過Exception類創(chuàng)建自己的異常類類創(chuàng)建自己的異常類程序代碼如下程序代碼如下:自定義異常類自定義異常類class OverflowException extends Exception public void printMsg() System.out.println(exception: +this.getMessage(); this.printStackTrace(); System.exit(0); /終止當(dāng)前正在運(yùn)行的終止當(dāng)前正在運(yùn)行的 Java 虛擬機(jī)。參數(shù)用作狀態(tài)碼;虛擬機(jī)。參數(shù)用作狀態(tài)碼;根據(jù)慣例,非零的狀態(tài)碼表示異常終止根據(jù)慣例,非零的狀態(tài)碼表示異常終止 自定義異常類,繼承于自定義異常類,繼承于異常類異常類Exception用于輸出異常信息的用于輸出異常信息的成員方法成員方法只有當(dāng)try塊中執(zhí)行System.exit()時(shí),會(huì)立即結(jié)束程序。用處:用于非內(nèi)存的系統(tǒng)資源的釋放,如打開的文件、建立的網(wǎng)絡(luò)連接等public class Try7 public void calc(byte k) throws OverflowException byte y=1, i=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 感恩節(jié)活動(dòng)總結(jié) 15篇
- 感恩老師的發(fā)言稿集合15篇
- 律師執(zhí)業(yè)年度工作總結(jié)
- 供電工程施工方案(技術(shù)標(biāo))
- 年會(huì)代表團(tuán)隊(duì)發(fā)言稿范文(10篇)
- 湖南省株洲市高三教學(xué)質(zhì)量統(tǒng)一檢測(cè)(一) 語文試題(含答案)
- 2025版汽車零部件銷售訂購合同(年度版)
- 二零二五版淘寶年度合作運(yùn)營效果跟蹤協(xié)議3篇
- 精細(xì)化人力資源管理的月度工作計(jì)劃
- 金屬非金屬公司話務(wù)員工作總結(jié)
- 勵(lì)志課件-如何做好本職工作
- 2024年山東省濟(jì)南市中考英語試題卷(含答案解析)
- 靜脈治療護(hù)理技術(shù)操作標(biāo)準(zhǔn)(2023版)解讀 2
- 2024年全國各地中考試題分類匯編(一):現(xiàn)代文閱讀含答案
- GB/T 30306-2024家用和類似用途飲用水處理濾芯
- 武強(qiáng)縣華浩數(shù)控設(shè)備科技有限公司年產(chǎn)9000把(只)提琴、吉他、薩克斯等樂器及80臺(tái)(套)數(shù)控雕刻設(shè)備項(xiàng)目環(huán)評(píng)報(bào)告
- 安全生產(chǎn)法律法規(guī)匯編(2024年4月)
- DB11∕T 882-2023 房屋建筑安全評(píng)估技術(shù)規(guī)程
- 華為員工股權(quán)激勵(lì)方案
- 衛(wèi)生院安全生產(chǎn)知識(shí)培訓(xùn)課件
- 兒童尿道黏膜脫垂介紹演示培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論