第10章異常處理ppt課件_第1頁
第10章異常處理ppt課件_第2頁
第10章異常處理ppt課件_第3頁
第10章異常處理ppt課件_第4頁
第10章異常處理ppt課件_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第10章章 異常處置異常處置本章要點(diǎn)本章要點(diǎn)u了解異常的概念了解異常的概念u掌握捕捉異常的方法掌握捕捉異常的方法u了解了解Java中常見的異常中常見的異常u掌握自定義異常的方法掌握自定義異常的方法u了解如何在方法中拋出異常了解如何在方法中拋出異常u了解運(yùn)轉(zhuǎn)時(shí)異常種類了解運(yùn)轉(zhuǎn)時(shí)異常種類u了解異常處置的運(yùn)用原那么了解異常處置的運(yùn)用原那么第第10章章 異常處置異常處置主要內(nèi)容主要內(nèi)容10.1 異常概述異常概述n假設(shè)一輛轎車發(fā)生了缺點(diǎn),能夠是某個(gè)零件假設(shè)一輛轎車發(fā)生了缺點(diǎn),能夠是某個(gè)零件發(fā)生了問題,也能夠是沒有油了發(fā)生了問題,也能夠是沒有油了n假設(shè)是由于零件問題,只需求改換零件就可假設(shè)是由于零件問題

2、,只需求改換零件就可以處理;以處理;n假設(shè)是沒有油了,只需求加滿油就可以正常假設(shè)是沒有油了,只需求加滿油就可以正常行駛了。行駛了。n程序中異常與此類似,就對(duì)程序中能夠發(fā)生程序中異常與此類似,就對(duì)程序中能夠發(fā)生異常語句進(jìn)展處置,使程序可以正常執(zhí)行。異常語句進(jìn)展處置,使程序可以正常執(zhí)行。10.1 異常概述異常概述n在程序開發(fā)過程中,能夠存在各種錯(cuò)誤,在程序開發(fā)過程中,能夠存在各種錯(cuò)誤,有些錯(cuò)誤是可以必免的,而有些錯(cuò)誤卻是有些錯(cuò)誤是可以必免的,而有些錯(cuò)誤卻是意想不到的,在意想不到的,在Java中把這些能夠發(fā)生的中把這些能夠發(fā)生的錯(cuò)誤稱為異常。錯(cuò)誤稱為異常。n圖圖10-1闡明了異常類的承繼關(guān)系。闡明了

3、異常類的承繼關(guān)系。 10.1 異常概述異常概述10.2 異常分類異常分類n10.2.1 可控式異??煽厥疆惓10.2.2 運(yùn)轉(zhuǎn)時(shí)異常運(yùn)轉(zhuǎn)時(shí)異常10.2.1 可控式異??煽厥疆惓在在Java中把那些可以預(yù)知的錯(cuò)誤,中把那些可以預(yù)知的錯(cuò)誤,n例如從文件中讀取數(shù)據(jù),例如從文件中讀取數(shù)據(jù),n對(duì)數(shù)據(jù)庫進(jìn)展操作等,對(duì)數(shù)據(jù)庫進(jìn)展操作等,n在程序編譯時(shí)就能對(duì)程序中能夠存在的錯(cuò)誤在程序編譯時(shí)就能對(duì)程序中能夠存在的錯(cuò)誤進(jìn)展處置,并給出詳細(xì)的錯(cuò)誤信息,我們把進(jìn)展處置,并給出詳細(xì)的錯(cuò)誤信息,我們把這些錯(cuò)誤稱為可控式異常。這些錯(cuò)誤稱為可控式異常。10.2.1 可控式異??煽厥疆惓?表表10-1 10-1 常見可控式

4、異常及闡明常見可控式異常及闡明方法方法說明說明IOException輸入輸出異常輸入輸出異常SQLException操作數(shù)據(jù)庫異常操作數(shù)據(jù)庫異常classnotfoundexception指定的類不存在指定的類不存在NoSuchFieldException屬性不存在異常屬性不存在異常NoSuchMethodException方法未找到異常方法未找到異常10.2.1 可控式異常可控式異?!纠纠?0-1】 在在main()方法中運(yùn)用方法中運(yùn)用Class類的類的forName()方法加載一個(gè)不存在的類。方法加載一個(gè)不存在的類。try Class.forName(com.mysql.jdbc.Dri

5、ver); catch (ClassNotFoundException e) e.printStackTrace();10.2.2 運(yùn)轉(zhuǎn)時(shí)異常運(yùn)轉(zhuǎn)時(shí)異常n在在Java中有些錯(cuò)誤是不能被編譯器檢測(cè)到的中有些錯(cuò)誤是不能被編譯器檢測(cè)到的n在進(jìn)展除法運(yùn)算時(shí),除數(shù)為零;在進(jìn)展除法運(yùn)算時(shí),除數(shù)為零;n試圖把一個(gè)不是由數(shù)字組成的字符串運(yùn)用試圖把一個(gè)不是由數(shù)字組成的字符串運(yùn)用Integer類的類的parseInt()方法轉(zhuǎn)換為整數(shù)。方法轉(zhuǎn)換為整數(shù)。nJava的編譯器是檢測(cè)不到的,因此可以正常的編譯器是檢測(cè)不到的,因此可以正常編譯,但是在運(yùn)轉(zhuǎn)時(shí)就會(huì)發(fā)生異常,這些異編譯,但是在運(yùn)轉(zhuǎn)時(shí)就會(huì)發(fā)生異常,這些異常稱為運(yùn)轉(zhuǎn)

6、時(shí)異常。常稱為運(yùn)轉(zhuǎn)時(shí)異常。 表表10-2 10-2 常見運(yùn)轉(zhuǎn)時(shí)異常及闡明常見運(yùn)轉(zhuǎn)時(shí)異常及闡明10.2.2 運(yùn)轉(zhuǎn)時(shí)異常運(yùn)轉(zhuǎn)時(shí)異常方法方法說明說明IndexOutOfBoundsException索引越界異常索引越界異常NullPointerException程序遇上了空指針程序遇上了空指針ArithmeticException數(shù)學(xué)運(yùn)算異常數(shù)學(xué)運(yùn)算異常IllegalArgumentException方法的參數(shù)錯(cuò)誤方法的參數(shù)錯(cuò)誤ClassCastException類型強(qiáng)制轉(zhuǎn)換異常類型強(qiáng)制轉(zhuǎn)換異常10.2.2 運(yùn)轉(zhuǎn)時(shí)異常運(yùn)轉(zhuǎn)時(shí)異?!纠纠?0-2】 在在main()方法中創(chuàng)建一個(gè)長(zhǎng)度為方法中創(chuàng)建一個(gè)長(zhǎng)

7、度為5的數(shù)組,并為其第的數(shù)組,并為其第6個(gè)元素賦值。個(gè)元素賦值。int array = new int5; array5 = 6; 10.3 獲取異常信息獲取異常信息n獲取異常信息就好比工廠里某個(gè)線路出現(xiàn)缺獲取異常信息就好比工廠里某個(gè)線路出現(xiàn)缺點(diǎn)停電了,電工要從線路中找出現(xiàn)缺點(diǎn)的緣點(diǎn)停電了,電工要從線路中找出現(xiàn)缺點(diǎn)的緣由,由,n找到了出現(xiàn)缺點(diǎn)的緣由,就象程序中獲取到找到了出現(xiàn)缺點(diǎn)的緣由,就象程序中獲取到了異常信息。了異常信息。n在在Java中中java.lang.Throwable類是一切異類是一切異常類的超類,該類提供了獲得異常信息的方常類的超類,該類提供了獲得異常信息的方法。法。表表10-

8、3 10-3 獲取異常信息的方法及闡明獲取異常信息的方法及闡明10.3 獲取異常信息獲取異常信息方法方法說明說明String getLocalizedMessage()返回異常的本地化描述返回異常的本地化描述String getMessage()返回異常的詳細(xì)消息字符串返回異常的詳細(xì)消息字符串String printStackTrace()顯示出異常更深的調(diào)用信息顯示出異常更深的調(diào)用信息String toString()獲得異常的簡(jiǎn)短描述獲得異常的簡(jiǎn)短描述10.3 獲取異常信息獲取異常信息【例【例10-3】 運(yùn)用上述方法輸出進(jìn)展除運(yùn)用上述方法輸出進(jìn)展除0運(yùn)算異運(yùn)算異常。常。try int z

9、= 100 / 0; catch (Exception ex) ex.printStackTrace(); System.out.println(ex.getMessage(); System.out.println(ex.getLocalizedMessage(); System.out.println(ex.toString();10.4 處置異常處置異常n10.4.1 運(yùn)用運(yùn)用try-catch處置異常處置異常n10.4.2 運(yùn)用運(yùn)用try-catch-finally處置異常處置異常n10.4.3 運(yùn)用運(yùn)用try-finally處置異常處置異常10.4.1 運(yùn)用運(yùn)用try-catch處置

10、異常處置異常n對(duì)于程序中能夠發(fā)生異常的語句,可以將其對(duì)于程序中能夠發(fā)生異常的語句,可以將其添加到添加到try-catch語句塊中,這樣當(dāng)程序發(fā)生語句塊中,這樣當(dāng)程序發(fā)生異常時(shí),就可以對(duì)其進(jìn)展相應(yīng)的處置。異常時(shí),就可以對(duì)其進(jìn)展相應(yīng)的處置。n tryn 需求正常執(zhí)行的語句需求正常執(zhí)行的語句n catch(Exception ex)n 對(duì)異常進(jìn)展處置的語句對(duì)異常進(jìn)展處置的語句n 10.4.1 運(yùn)用運(yùn)用try-catch處置異常處置異常n闡明:闡明:ntry和和catch是進(jìn)展異常處置的關(guān)鍵字;是進(jìn)展異常處置的關(guān)鍵字;ntry和和catch之間的大括號(hào)內(nèi)是程序需求正常之間的大括號(hào)內(nèi)是程序需求正常執(zhí)行但

11、又能夠發(fā)生異常的語句;執(zhí)行但又能夠發(fā)生異常的語句;ncatch后的小括號(hào)內(nèi)是程序需求處置的異常后的小括號(hào)內(nèi)是程序需求處置的異常類型;類型;ncatch后的大括號(hào)內(nèi)是對(duì)程序發(fā)生的異常進(jìn)后的大括號(hào)內(nèi)是對(duì)程序發(fā)生的異常進(jìn)展處置的語句。展處置的語句。int a = 6;int b = 0;try / try監(jiān)控區(qū)域監(jiān)控區(qū)域 if (b = 0) throw new ArithmeticException(); System.out.println(a/b的值是:的值是: + a / b);catch (ArithmeticException e) / catch捕捉異常捕捉異常 System.out.

12、println(出現(xiàn)異常,變量出現(xiàn)異常,變量b不能為不能為0);System.out.println(程序正常終了。程序正常終了。);int intArray = new int3;try for (int i = 0; i = intArray.length; i+) intArrayi = i; System.out.println(intArrayi / (i - 3); catch (ArithmeticException e) System.out.println(除數(shù)為除數(shù)為0異常。異常。);catch (ArrayIndexOutOfBoundsException e) Syst

13、em.out.println(intArray數(shù)組下標(biāo)越界異常。數(shù)組下標(biāo)越界異常。); System.out.println(程序正常終了。程序正常終了。);10.4.2 運(yùn)用運(yùn)用try-catch-finallyntry-catch-finally語句塊的語法格式如下:語句塊的語法格式如下:n tryn 需求執(zhí)行的語句需求執(zhí)行的語句n catch(Exception ex)n 對(duì)異常進(jìn)展處置的語句對(duì)異常進(jìn)展處置的語句 n finallyn 一定會(huì)被處置的語句一定會(huì)被處置的語句n 10.4.2 運(yùn)用運(yùn)用try-catch-finallyn闡明:闡明:ntry、catch和和finally是進(jìn)展

14、異常處置關(guān)鍵字是進(jìn)展異常處置關(guān)鍵字ntry、catch后面的大小括號(hào)的作用同后面的大小括號(hào)的作用同try-catch語句。語句。nfinally后大括號(hào)內(nèi)的語句,不論程序能否發(fā)生后大括號(hào)內(nèi)的語句,不論程序能否發(fā)生異常都要執(zhí)行,因此異常都要執(zhí)行,因此finally語句塊通常用于執(zhí)語句塊通常用于執(zhí)行渣滓回收、釋放資源等操作。行渣滓回收、釋放資源等操作。 int i = 0;String greetings = Hello world !, Hello World ! , HELLO WORLD ! ;while (i 4) try System.out.println(greetingsi+);

15、catch (ArrayIndexOutOfBoundsException e) System.out.println(數(shù)組下標(biāo)越界異常數(shù)組下標(biāo)越界異常); finally System.out.println(-);10.4.3 運(yùn)用運(yùn)用try-finally處置異常處置異常n對(duì)于程序中能夠發(fā)生異常的語句,可以將其對(duì)于程序中能夠發(fā)生異常的語句,可以將其添加到添加到try-finally語句塊中,這樣當(dāng)程序發(fā)語句塊中,這樣當(dāng)程序發(fā)生異常時(shí),就可以在生異常時(shí),就可以在finally語句塊中對(duì)其進(jìn)語句塊中對(duì)其進(jìn)展相應(yīng)的處置,展相應(yīng)的處置,n另外當(dāng)程序沒有發(fā)生異常時(shí),執(zhí)行完另外當(dāng)程序沒有發(fā)生異常時(shí),

16、執(zhí)行完try和和finally之間的語句后,也將執(zhí)行之間的語句后,也將執(zhí)行finally語句語句塊中的代碼,塊中的代碼,n因此可以在因此可以在finally語句塊中放置一些必需執(zhí)語句塊中放置一些必需執(zhí)行的代碼,比如釋放內(nèi)存資源的代碼等等。行的代碼,比如釋放內(nèi)存資源的代碼等等。10.4.3 運(yùn)用運(yùn)用try-finally處置異常處置異常ntry-finally語句塊的語法格式如下:語句塊的語法格式如下:n tryn 需求執(zhí)行的語句需求執(zhí)行的語句n finallyn 一定會(huì)被處置的語句一定會(huì)被處置的語句n 圖圖10-1 try10-1 try、catchcatch、finallyfinally語句

17、塊的執(zhí)行語句塊的執(zhí)行10.5 拋出異常拋出異常n10.5.1 運(yùn)用運(yùn)用throws聲明拋出異常聲明拋出異常n10.5.2 運(yùn)用運(yùn)用throw語句拋出異常語句拋出異常10.5.1 運(yùn)用運(yùn)用throws聲明拋出異常聲明拋出異常nthrows通常用于方法聲明,當(dāng)方法中能夠通常用于方法聲明,當(dāng)方法中能夠存在異常,卻不想在方法中對(duì)異常進(jìn)展處置存在異常,卻不想在方法中對(duì)異常進(jìn)展處置時(shí),就可以在聲明方法時(shí)運(yùn)用時(shí),就可以在聲明方法時(shí)運(yùn)用throws聲明聲明拋出的異常,然后在調(diào)用該方法的其他方法拋出的異常,然后在調(diào)用該方法的其他方法中對(duì)異常進(jìn)展處置如運(yùn)用中對(duì)異常進(jìn)展處置如運(yùn)用try-catch語句語句或運(yùn)用或運(yùn)

18、用throws聲明拋出的異常。聲明拋出的異常。10.5.1 運(yùn)用運(yùn)用throws聲明拋出異常聲明拋出異常n假設(shè)需求運(yùn)用假設(shè)需求運(yùn)用throws聲明拋出多個(gè)異常,各聲明拋出多個(gè)異常,各異常之間要用逗號(hào)分隔。異常之間要用逗號(hào)分隔。n 數(shù)據(jù)類型數(shù)據(jù)類型 方法名方法名(形參列表形參列表 ) throws 異常異常類類1,異常類異常類2,異常類異常類nn 方法體;方法體;n methodname throws Exception1,Exception2,.,ExceptionN 10.5.1 運(yùn)用運(yùn)用throws聲明拋出異常聲明拋出異常n闡明:闡明:n 數(shù)據(jù)類型是根本數(shù)據(jù)類型或?qū)ο箢愋?;?shù)據(jù)類型是根本數(shù)

19、據(jù)類型或?qū)ο箢愋?;n 方法名是方法名是Java言語的合法標(biāo)識(shí)符;言語的合法標(biāo)識(shí)符;n throws是拋出異常的關(guān)鍵字;是拋出異常的關(guān)鍵字;n 異常類是異常類是Java的異常類或自定義異常類;的異常類或自定義異常類;n 方法體是該方法需求執(zhí)行的語句。方法體是該方法需求執(zhí)行的語句。static void pop() throws NegativeArraySizeException int arr = new int-3; / 創(chuàng)建數(shù)組創(chuàng)建數(shù)組public static void main(String args) try / try語句處置異常信息語句處置異常信息pop(); / 調(diào)用調(diào)用pop

20、()方法方法 catch (NegativeArraySizeException e) System.out.println(pop()方法拋出的異常方法拋出的異常); 10.5.2 運(yùn)用運(yùn)用throw語句拋出異常語句拋出異常n在通常情況下,程序發(fā)生錯(cuò)誤時(shí)系統(tǒng)會(huì)自動(dòng)在通常情況下,程序發(fā)生錯(cuò)誤時(shí)系統(tǒng)會(huì)自動(dòng)拋出異常,而有時(shí)希望程序自行拋出異常,拋出異常,而有時(shí)希望程序自行拋出異常,可以運(yùn)用可以運(yùn)用throw語句來實(shí)現(xiàn)。語句來實(shí)現(xiàn)。nthrow語句通常用在方法中,在程序中自行語句通常用在方法中,在程序中自行拋出異常,運(yùn)用拋出異常,運(yùn)用throw語句拋出的是異常類語句拋出的是異常類的實(shí)例,通常與的實(shí)例

21、,通常與if語句一同運(yùn)用。語句一同運(yùn)用。10.5.2 運(yùn)用運(yùn)用throw語句拋出異常語句拋出異常nthrow語句的語法格式如下:語句的語法格式如下:n throw new Exception(對(duì)異常的闡明對(duì)異常的闡明);n其中其中nthrow是拋出異常的關(guān)鍵字;是拋出異常的關(guān)鍵字;nException是異常類通常運(yùn)用自定義異常是異常類通常運(yùn)用自定義異常類。類。10.5.2 運(yùn)用運(yùn)用throw語句拋出異常語句拋出異?!纠纠?0-7】 計(jì)算圓的面積。設(shè)定圓的半徑不能計(jì)算圓的面積。設(shè)定圓的半徑不能小于小于20,小于那么拋出異常并給出提示信息。,小于那么拋出異常并給出提示信息。ThrowDemo e

22、x = new ThrowDemo(); try exputeArea(10); / 調(diào)用方法 catch (Exception e) System.out.println(e.getMessage(); private static final double PI = 3.14; / 圓周率圓周率public void computeArea(double r) throws Exception if (r = 20.0) / 運(yùn)用運(yùn)用throw語句拋出異常語句拋出異常 throw new Exception(程序異常:程序異常:n半徑為半徑為 : + r + n半徑不能小于半徑不能小于20

23、。); else double circleArea = PI * r * r; / 計(jì)算圓的面積計(jì)算圓的面積 System.out.println(半徑是半徑是 + r + 的圓面積是:的圓面積是: + circleArea); 10.6 自定義異常自定義異常n10.6.1 創(chuàng)建自定義異常類創(chuàng)建自定義異常類n10.6.2 運(yùn)用自定義異常類運(yùn)用自定義異常類10.6.1 創(chuàng)建自定義異常類創(chuàng)建自定義異常類n創(chuàng)建自定義的異常類需求承繼自創(chuàng)建自定義的異常類需求承繼自Exception類,并提供含有一個(gè)類,并提供含有一個(gè)String類型形參的構(gòu)造類型形參的構(gòu)造方法,該形參就是異常的描畫信息,可以經(jīng)方法,

24、該形參就是異常的描畫信息,可以經(jīng)過過getMessage()方法獲得。例如:方法獲得。例如:public class NewException extends Exception public NewException(String s) super(s); 10.6.2 運(yùn)用自定義異常類運(yùn)用自定義異常類n創(chuàng)建完自定義異常類,我們就可以在程序中創(chuàng)建完自定義異常類,我們就可以在程序中運(yùn)用自定義異常類了。運(yùn)用自定義異常類了。n運(yùn)用自定義異常類可以經(jīng)過運(yùn)用自定義異常類可以經(jīng)過throw語句拋出語句拋出異常,異常,n接下來經(jīng)過實(shí)例來闡明自定義異常類的運(yùn)用接下來經(jīng)過實(shí)例來闡明自定義異常類的運(yùn)用10.6.

25、2 運(yùn)用自定義異常類運(yùn)用自定義異常類【例【例10-8】 在工程中自定義異常類,然后編寫在工程中自定義異常類,然后編寫測(cè)試類。測(cè)試類。1編寫自定義異常類編寫自定義異常類NewException,該類,該類承繼自承繼自Exception類。在構(gòu)造方法中,輸出異常類。在構(gòu)造方法中,輸出異常信息。信息。2編寫編寫NewExceptionTest類,在類,在showArea()方法中拋出異常,在方法中拋出異常,在main()方法中方法中處置異常。處置異常。public class NewException extends Exception private static final long serialVersionUID = -400794805034166270L public NewException(Double r) System.out.println(異常:異常: 半徑不能小于半徑不能小于20);

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論