第10章 異常處理機制_第1頁
第10章 異常處理機制_第2頁
第10章 異常處理機制_第3頁
第10章 異常處理機制_第4頁
第10章 異常處理機制_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第10章 異常處理機制傳統(tǒng)的處理方式傳統(tǒng)的處理方式JavaJava的異常處理機制的異常處理機制JavaJava異常類異常類異常的處理異常的處理項目學(xué)做項目學(xué)做課程內(nèi)容二二三三四四五五一一v在進行程序設(shè)計時,錯誤的產(chǎn)生是不可避免的在進行程序設(shè)計時,錯誤的產(chǎn)生是不可避免的 如何處理錯誤? 把錯誤交給誰去處理? 程序又該如何從錯誤中恢復(fù)?v這是任何程序設(shè)計語言都要解決的問題這是任何程序設(shè)計語言都要解決的問題一、傳統(tǒng)處理方式一、傳統(tǒng)處理方式v class Calculate vstatic void calculate(int num1,int num2)vint nResult;vnResult =

2、 num1 + num2; /加法運算vSystem.out.println(和= + nResult);vnResult = num1 - num2; /減法運算vSystem.out.println(差= + nResult);vnResult = num1 * num2; /乘法運算vSystem.out.println(積= + nResult);v /除法運算,先判斷分母為0 不? 注1vif(num2 !=0)vnResult = num1 / num2;vSystem.out.println(商= + nResult);vvelsevSystem.out.println(Erro

3、r,沒有商,除數(shù)為0! );vv一、傳統(tǒng)處理方式一、傳統(tǒng)處理方式v if(num2 !=0) nResult = num1 % num2;v System.out.println(余數(shù)= + nResultn第二次運算);v elsevSystem.out.println(Error,沒有余數(shù),除數(shù)為0! );v v v v public class Traditional vpublic static void main(String aaa) vint x = 9, y = 6;vCalculate.calculate(x, y);/ /注3vx = 7;vy = 0;vCalculate

4、.calculate(x, y);/ /注4vv 一、傳統(tǒng)處理方式一、傳統(tǒng)處理方式運行結(jié)果:和=15差=3積=54商=1余數(shù)=3第二次運算和=7積=0Error,沒有商,除數(shù)為0!Error,沒有余數(shù)除數(shù)為0!程序可讀性差,大量的錯誤處理代碼混雜在程序中程序可讀性差,大量的錯誤處理代碼混雜在程序中觀察前面的程序,會發(fā)現(xiàn)大部分精力花在出錯處理上觀察前面的程序,會發(fā)現(xiàn)大部分精力花在出錯處理上只把能夠想到的錯誤考慮到,此外的情況無法處理只把能夠想到的錯誤考慮到,此外的情況無法處理出錯返回信息量太少,無法更確切的了解錯誤狀況或原因出錯返回信息量太少,無法更確切的了解錯誤狀況或原因以常規(guī)方法處理錯誤存在

5、的問題以常規(guī)方法處理錯誤存在的問題一、傳統(tǒng)處理方式一、傳統(tǒng)處理方式所謂所謂錯誤錯誤,是在程序運行過程中發(fā)生的異常事件,比,是在程序運行過程中發(fā)生的異常事件,比如除如除0溢出、數(shù)組越界、文件找不到等,這些事件的溢出、數(shù)組越界、文件找不到等,這些事件的發(fā)生將阻止程序的正常運行。為了加強程序的強壯性發(fā)生將阻止程序的正常運行。為了加強程序的強壯性(robust),程序設(shè)計時,必須考慮到可能發(fā)生的),程序設(shè)計時,必須考慮到可能發(fā)生的異常事件并做出相應(yīng)的處理。異常事件并做出相應(yīng)的處理。二、二、JavaJava異常處理機制異常處理機制v Java異常是異常是Java提供的用于處理程序中錯誤的一種機制。提供的

6、用于處理程序中錯誤的一種機制。v 所謂錯誤是指在程序運行過程中發(fā)生的一些異常事件(如:所謂錯誤是指在程序運行過程中發(fā)生的一些異常事件(如:除除0溢出,數(shù)組下標(biāo)越界,所要讀取的文件不存在)。溢出,數(shù)組下標(biāo)越界,所要讀取的文件不存在)。v 設(shè)計良好的程序應(yīng)該在異常發(fā)生時提供處理這些錯誤的方設(shè)計良好的程序應(yīng)該在異常發(fā)生時提供處理這些錯誤的方法,使得程序不會因為異常的發(fā)生而阻斷或產(chǎn)生不可預(yù)見法,使得程序不會因為異常的發(fā)生而阻斷或產(chǎn)生不可預(yù)見的結(jié)果。的結(jié)果。二、二、JavaJava異常處理機制異常處理機制v Java程序的執(zhí)行過程中如出現(xiàn)異常事件,可以生成一個異程序的執(zhí)行過程中如出現(xiàn)異常事件,可以生成一

7、個異常類對象,該異常對象封裝了異常事件的信息并將被提交常類對象,該異常對象封裝了異常事件的信息并將被提交給給Java運行時系統(tǒng),這個過程稱為拋出(運行時系統(tǒng),這個過程稱為拋出(throw)異常。)異常。v 當(dāng)當(dāng)Java運行時系統(tǒng)接收到異常對象時,會尋找處理這一異運行時系統(tǒng)接收到異常對象時,會尋找處理這一異常的代碼并把當(dāng)前異常對象交給其處理,這一過程稱為捕常的代碼并把當(dāng)前異常對象交給其處理,這一過程稱為捕獲(獲(catch)異常。)異常。二、二、JavaJava異常處理機制異常處理機制 三、三、JavaJava異常類異常類v J2SDK定義了很多異常類,這些類對應(yīng)了各種各樣可能定義了很多異常類,

8、這些類對應(yīng)了各種各樣可能出現(xiàn)的異常事件。出現(xiàn)的異常事件。ThrowableEorrorExceptionRuntimeExceptionv Error:稱為錯誤,由稱為錯誤,由Java虛擬機生成并拋出,包括動態(tài)鏈接虛擬機生成并拋出,包括動態(tài)鏈接失敗、虛擬機錯誤等,程序?qū)ζ洳蛔鎏幚怼#ㄒ蔡幚聿涣耍┦?、虛擬機錯誤等,程序?qū)ζ洳蛔鎏幚怼#ㄒ蔡幚聿涣耍﹙ Exception:所有異常類的父類,其子類對應(yīng)了各種各樣可能:所有異常類的父類,其子類對應(yīng)了各種各樣可能出現(xiàn)的異常事件,一般需要用戶顯式的聲明或捕獲。出現(xiàn)的異常事件,一般需要用戶顯式的聲明或捕獲。v Runtime Exception:一類特殊的

9、異常,如被:一類特殊的異常,如被0除、數(shù)據(jù)下除、數(shù)據(jù)下標(biāo)越界等,其產(chǎn)生比較頻繁,處理麻煩,如果顯式的聲明或捕標(biāo)越界等,其產(chǎn)生比較頻繁,處理麻煩,如果顯式的聲明或捕獲將會對程序可讀性和運行效率影響很大。因此由系統(tǒng)自動檢獲將會對程序可讀性和運行效率影響很大。因此由系統(tǒng)自動檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理)。測并將它們交給缺省的異常處理程序(用戶可不必對其處理)。 三、三、JavaJava異常類異常類v所有的包中都定義了異常類和錯誤類。所有的包中都定義了異常類和錯誤類。vException類是所有異常的父類類是所有異常的父類vError類是所有錯誤的父類,這兩個類都實現(xiàn)了類是所

10、有錯誤的父類,這兩個類都實現(xiàn)了Throwable接口。接口。 三、三、JavaJava異常類異常類NCEPU3 異常分類 ThrowableErrorException虛擬機錯誤虛擬機錯誤內(nèi)存溢出錯誤內(nèi)存溢出錯誤圖形界面錯誤圖形界面錯誤內(nèi)存溢內(nèi)存溢出錯誤出錯誤棧溢出棧溢出錯誤錯誤類定義未類定義未找到錯誤找到錯誤NCEPU3 異常分類 ThrowableErrorExceptionRuntimeException運行時異常運行時異常文件已文件已結(jié)束異常結(jié)束異常文件未文件未找到異常找到異常方法未方法未找到異常找到異常輸入輸出輸入輸出異常異常圖形界面圖形界面異常異常NCEPU3 異常分類 Throw

11、ableErrorExceptionRuntimeException運行時異常運行時異常算術(shù)算術(shù)異常異常類型強制類型強制轉(zhuǎn)換異常轉(zhuǎn)換異常方法未方法未找到異常找到異常輸入輸出輸入輸出異常異常圖形界面圖形界面異常異常空指針空指針異常異常數(shù)組負(fù)數(shù)組負(fù)下標(biāo)異常下標(biāo)異常違背安全違背安全原則異常原則異常數(shù)組下標(biāo)越界異常數(shù)組下標(biāo)越界異常下標(biāo)越界異常下標(biāo)越界異常IndexOutOfBoundsExceptioncatch (ArrayIndexOutOfBoundsException e )catch (IndexOutOfBoundsException e )catch (RuntimeException

12、e )catch (Exception e )catch (Throwable e )v 算術(shù)異常算術(shù)異常ArithmeticException整數(shù)除法中,若除數(shù)為整數(shù)除法中,若除數(shù)為0 0,或用,或用0 0取模,會發(fā)生該異常。取模,會發(fā)生該異常。例如:例如:int i = 12 / 0;int m = 5 % 0;其他算術(shù)操作不會產(chǎn)生異常其他算術(shù)操作不會產(chǎn)生異常 幾個常見的公用異常類幾個常見的公用異常類 三、三、JavaJava異常類異常類v 空指針異??罩羔槷惓ullPointerException當(dāng)程序試圖訪問一個空對象(即沒有實例化的對象)中的當(dāng)程序試圖訪問一個空對象(即沒有實例化的

13、對象)中的變量或方法,或一個空數(shù)組中的元素時,會發(fā)生該異常。變量或方法,或一個空數(shù)組中的元素時,會發(fā)生該異常。例如:例如:int a = null; a 0 = 0;String s=null; System.out.println(s.length();幾個常見的公用異常類幾個常見的公用異常類 三、三、JavaJava異常類異常類v 類型強制轉(zhuǎn)換異常類型強制轉(zhuǎn)換異常ClassCastException當(dāng)進行類型強制轉(zhuǎn)換時,對于不能進行的轉(zhuǎn)換操作,會發(fā)當(dāng)進行類型強制轉(zhuǎn)換時,對于不能進行的轉(zhuǎn)換操作,會發(fā)生該異常。生該異常。例如:例如:Object obj = new Object ();Stri

14、ng s = (String) obj;幾個常見的公用異常類幾個常見的公用異常類 三、三、JavaJava異常類異常類v 數(shù)組負(fù)下標(biāo)異常數(shù)組負(fù)下標(biāo)異常NagativeArraySizeException創(chuàng)建數(shù)組時,若數(shù)組元素個數(shù)為負(fù),會發(fā)生該異常。創(chuàng)建數(shù)組時,若數(shù)組元素個數(shù)為負(fù),會發(fā)生該異常。例如:例如:int a = new int -3 ;幾個常見的公用異常類幾個常見的公用異常類 三、三、JavaJava異常類異常類v 數(shù)組下標(biāo)越界異常數(shù)組下標(biāo)越界異常ArrayIndexOutOfBoundsException試圖訪問一個越界的數(shù)組元素時(即下標(biāo)大于等于數(shù)組的成試圖訪問一個越界的數(shù)組元素時

15、(即下標(biāo)大于等于數(shù)組的成員變量員變量length), ,會發(fā)生該異常。會發(fā)生該異常。例如:例如:int a = new int 1 ;a 1 = 3;幾個常見的公用異常類幾個常見的公用異常類 三、三、JavaJava異常類異常類v ArithmeticExceptionv NullPointerExceptionv ClassCastExceptionv NagativeArraySizeExceptionv ArrayIndexOutOfBoundsException都是運行時異常類都是運行時異常類(RuntimeException)的子類的子類幾個常見的公用異常類幾個常見的公用異常類 三、

16、三、JavaJava異常類異常類常見的異常類型 方 法 名說 明Exception 異常層次結(jié)構(gòu)的根類異常層次結(jié)構(gòu)的根類ArithmeticException算術(shù)錯誤情形,如以零作除數(shù)算術(shù)錯誤情形,如以零作除數(shù)ArrayIndexOutOfBoundsException數(shù)組下標(biāo)越界數(shù)組下標(biāo)越界NullPointerException嘗試訪問嘗試訪問 null null 對象成員對象成員ClassNotFoundException不能加載所需的類不能加載所需的類InputMismatchException欲得到數(shù)據(jù)類型與實際輸入類型不匹配欲得到數(shù)據(jù)類型與實際輸入類型不匹配IllegalArgum

17、entException方法接收到非法參數(shù)方法接收到非法參數(shù)ClassCastException對象強制類型轉(zhuǎn)換出錯對象強制類型轉(zhuǎn)換出錯NumberFormatException數(shù)字格式轉(zhuǎn)換異常,如把數(shù)字格式轉(zhuǎn)換異常,如把abcabc轉(zhuǎn)換成轉(zhuǎn)換成數(shù)字?jǐn)?shù)字vJava的異常處理是通過的異常處理是通過5個關(guān)鍵字來實現(xiàn)的:個關(guān)鍵字來實現(xiàn)的:try、catch、 finally、throw、throws 捕獲異常 catchtryfinally執(zhí)行可能產(chǎn)生 異常的代碼 捕獲異常 無論是否發(fā)生異常,代碼總能執(zhí)行手動拋出異常 拋出異常 throw聲明異常 聲明方法可能要拋出的各種異常 throws四、異常處

18、理四、異常處理trycatch try-catch 塊后的代碼段public void method()try / 代碼段(此處不會產(chǎn)生異常) catch (異常類型 ex) / 對異常進行處理的代碼段/ 代碼段v使用使用try-catch塊捕獲異常,分為三種情況:塊捕獲異常,分為三種情況:第一種情況 四、異常處理四、異常處理public class Test3 public static void main(String args) try Scanner in = new Scanner(System.in);System.out.print(請輸入被除數(shù):);int num1 = in.

19、nextInt();System.out.print(請輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d,num1, num2, num1/ num2);System.out.println(感謝使用本程序!); catch (Exception e) System.err.println(出現(xiàn)錯誤:被除數(shù)和除數(shù)必須是整數(shù), + 除數(shù)不能為零。);e.printStackTrace();try-catch塊v使用示例模擬第一種情況:使用示例模擬第一種情況:輸入:200 , 40演示示例:使用

20、try-catch處理異常四、異常處理四、異常處理trycatch異常類型匹配 try-catch 塊后的代碼段進入catch塊public void method()try / 代碼段 1 / 產(chǎn)生異常的代碼段 2 / 代碼段 3 catch (異常類型 ex) / 對異常進行處理的代碼段4/ 代碼段5v使用使用try-catch塊捕獲異常,分為三種情況:塊捕獲異常,分為三種情況:第二種情況 產(chǎn)生異常對象 程序繼續(xù)執(zhí)行異常是一種特殊的對象,類型為java.lang.Exception或其子類 發(fā)生異常try-catch塊四、異常處理四、異常處理public class Test3 publi

21、c static void main(String args) try Scanner in = new Scanner(System.in);System.out.print(請輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d,num1, num2, num1/ num2);System.out.println(感謝使用本程序!); catch (Exception e) System.er

22、r.println(出現(xiàn)錯誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零。);e.printStackTrace();try-catch塊v使用示例模擬第二種情況:使用示例模擬第二種情況:輸入:B輸入:200,0演示示例:使用try-catch處理異常四、異常處理四、異常處理vprintStackTrace的堆棧跟蹤功能顯示出程序的堆棧跟蹤功能顯示出程序運行到當(dāng)前類的執(zhí)行流程運行到當(dāng)前類的執(zhí)行流程 java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:840)at java.util.Scanner.

23、next(Scanner.java:1461)at java.util.Scanner.nextInt(Scanner.java:2091)at java.util.Scanner.nextInt(Scanner.java:2050)at cn.jbit.exception.Test3.main(Test3.java:15)異常類型異常堆棧信息在此方法中拋出了異常try-catch塊出現(xiàn)異常的位置四、異常處理四、異常處理trycatch異常類型不匹配 try-catch 塊后的代碼段程序中斷運行 發(fā)生異常public void method()try / 代碼段 1 / 產(chǎn)生異常的代碼段 2

24、/ 代碼段 3 catch (異常類型 ex) / 對異常進行處理的代碼段4/ 代碼段5v使用使用try-catch塊捕獲異常,分為三種情況:塊捕獲異常,分為三種情況:第三種情況 產(chǎn)生異常對象 try-catch塊四、異常處理四、異常處理try-catch塊v 在在catch塊中處理異常塊中處理異常 加入用戶自定義處理信息 調(diào)用異常對象的方法輸出異常信息e.printStackTrace();System.err.println(出現(xiàn)錯誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零。);方法名說 明void printStackTrace()輸出異常的堆棧信息輸出異常的堆棧信息String ge

25、tMessage()返回異常信息描述字符串,返回異常信息描述字符串,是是printStackTrace()printStackTrace()輸出信息的一部分輸出信息的一部分四、異常處理四、異常處理v在在try-catch塊后加入塊后加入finally塊,可以確保無論塊,可以確保無論是否發(fā)生異常,是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行塊中的代碼總能被執(zhí)行try 塊 finally 塊 catch 塊 無異常 有異常 try-catch-finally四、異常處理四、異常處理public class Test4 public static void main(String args) t

26、ry Scanner in = new Scanner(System.in);System.out.print(請輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d,num1, num2, num1/ num2); catch (Exception e) System.err.println(“出現(xiàn)錯誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零。);System.out.println(e.ge

27、tMessage(); finally System.out.println(感謝使用本程序!);try-catch-finally輸入:200 40輸入:200 0第一種情況:無異常第二種情況:有異常 演示示例:使用try-catch-finally處理異常四、異常處理四、異常處理vfinally塊中語句不執(zhí)行的唯一情況塊中語句不執(zhí)行的唯一情況 異常處理代碼中執(zhí)行System.exit(1)退出Java虛擬機 try-catch-finallypublic class Test5 public static void main(String args) try Scanner in = ne

28、w Scanner(System.in);System.out.print(請輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2); catch (Exception e) System.err.println(出現(xiàn)錯誤:被除數(shù)和除數(shù)必須是整數(shù), +除數(shù)不能為零);System.exit(1); / finally語句塊不執(zhí)行的唯一情況 final

29、ly System.out.println(感謝使用本程序!);四、異常處理四、異常處理public void method()try / 代碼段 / 產(chǎn)生異常(異常類型2) catch (異常類型1 ex) / 對異常進行處理的代碼段 catch (異常類型2 ex) / 對異常進行處理的代碼段 catch (異常類型3 ex) / 對異常進行處理的代碼段/ 代碼段v 一段代碼可能會引發(fā)多種類型的異常一段代碼可能會引發(fā)多種類型的異常v 當(dāng)引發(fā)異常時,會按順序來查看每個當(dāng)引發(fā)異常時,會按順序來查看每個 catch 語句,并執(zhí)語句,并執(zhí)行第一個與異常類型匹配的行第一個與異常類型匹配的catch語

30、句語句v 執(zhí)行其中一條執(zhí)行其中一條 catch 語句后,其后語句后,其后 catch 語句將被忽語句將被忽略略 try 與異常類型1不匹配try-catch 塊后的代碼段發(fā)生異常產(chǎn)生異常對象catch與異常類型2匹配catchcatch程序繼續(xù)執(zhí)行進入catch塊多重catch塊四、異常處理四、異常處理多重catch塊 2-2public class Test6 public static void main(String args) try Scanner in = new Scanner(System.in);System.out.print(請輸入被除數(shù):);int num1 = in.

31、nextInt();System.out.print(請輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2); catch (InputMismatchException e) System.err.println(被除數(shù)和除數(shù)必須是整數(shù)。); catch (ArithmeticException e) System.err.println(除數(shù)不能為零。); catch (Exception e) System.err.println(其他未知

32、異常。); 輸入:B 進入第一個catch塊輸入:200 0 進入第二個catch塊在安排catch語句的順序時,首先應(yīng)該捕獲最特殊的異常, 然后再逐漸一般化,即先子類后父類 演示示例:使用多重catch處理異常練習(xí)根據(jù)編號輸出課程名稱v需求說明:需求說明: 按照控制臺提示輸入13之間任一個數(shù)字,程序?qū)⑤敵鱿鄳?yīng)的課程名稱 根據(jù)鍵盤輸入進行判斷。如果輸入正確,輸出對應(yīng)課程名稱。如果輸入錯誤,給出錯誤提示 不管輸入是否正確,均輸出“歡迎提出建議”語句完成時間:20分鐘共性問題集中講解n常見調(diào)試問題及解決辦法n代碼規(guī)范問題共性問題集中講解聲明異常vJava語言中通過語言中通過throws聲明某個方法

33、可能拋出聲明某個方法可能拋出的各種異常的各種異常v可以同時聲明多個異常,之間由逗號隔開可以同時聲明多個異常,之間由逗號隔開 public class Test7 public static void divide() throws Exception Scanner in = new Scanner(System.in);System.out.print(請輸入被除數(shù):);int num1 = in.nextInt();System.out.print(請輸入除數(shù):);int num2 = in.nextInt();System.out.println(String.format(%d / %

34、d = %d, num1, num2, num1/ num2);public static void main(String args) try divide(); catch (Exception e) e.printStackTrace();/public static void main(String args) throws Exception /divide();/divide()方法沒有處理異常,而是聲明異常方式1:調(diào)用者通過try-catch捕獲并處理異常 方式2:調(diào)用者通過throws繼續(xù)聲明異常 演示示例:使用throws聲明異常四、異常處理四、異常處理v除了系統(tǒng)自動拋出異常

35、外,有些問題需要程序員除了系統(tǒng)自動拋出異常外,有些問題需要程序員自行拋出異常自行拋出異常 public class Person private String name = ;/ 姓名private int age = 0;/ 年齡private String sex = 男;/ 性別public void setSex(String sex) throws Exception if (男.equals(sex) | 女.equals(sex)this.sex = sex;else throw new Exception(性別必須是“男”或者“女”!);public void print()

36、System.out.println( + ( + this.sex + , + this.age + 歲));public class Test8 public static void main(String args) Person person = new Person();try person.setSex(Male);person.print(); catch (Exception e) e.printStackTrace();拋出異常捕獲異常,或者throws異常拋出異常演示示例:使用throw拋出異常四、異常處理四、異常處理五、項目學(xué)做五、項目學(xué)做v1.項目目標(biāo)

37、項目目標(biāo)v(1)了解)了解Throwable類及其子類;類及其子類;v(2)了解運行時異常;)了解運行時異常;v(3)掌握如何捕獲異常、聲明異常和拋出異常;)掌握如何捕獲異常、聲明異常和拋出異常;v(4)掌握如何自定義異常;)掌握如何自定義異常;v(5)正確使用異常處理機制;)正確使用異常處理機制;v2.項目任務(wù)項目任務(wù)v虛擬銀行取錢過程,如果取錢數(shù)大于余額時需要虛擬銀行取錢過程,如果取錢數(shù)大于余額時需要做異常處理。假如取錢做異常處理。假如取錢2000,余額為,余額為1500元,元,就會出現(xiàn)預(yù)計好的異常處理消息。就會出現(xiàn)預(yù)計好的異常處理消息。v (1)銀行類v class Bank vdoub

38、le balance;/ 存款數(shù)vBank(double balance) this.balance = balance;vvpublic void deposite(double dAmount) vif (dAmount 0.0)balance += dAmount;vvpublic void withdrawal(double dAmount) throws InsufficientFundsException vif (balance dAmount) throw new InsufficientFundsException(this, dAmount);vbalance = bala

39、nce - dAmount;vvpublic void showBalance() vSystem.out.println(The balance is + (int) balance);vv 五、項目學(xué)做五、項目學(xué)做v (2)自定義異常類v public class InsufficientFundsException extends Exception vprivate Bank excepbank; / 銀行對象vprivate double excepAmount; / 要取的錢vInsufficientFundsException(Bank ba, double dAmount) v

40、excepbank = ba;vexcepAmount = dAmount;vvpublic String excepMessage() vString str = The balance is + excepbank.balance + nv+ The withdrawal was + excepAmount;vreturn str;vv / 異常類五、項目學(xué)做五、項目學(xué)做v (3)前端調(diào)用類v public class ExceptionDemo vpublic static void main(String args) vtry vBank ba = new Bank(1500);vba

41、.withdrawal(2000);vSystem.out.println(Withdrawal successful!);v catch (InsufficientFundsException e) vSystem.out.println(e.toString();vSystem.out.println(e.excepMessage();vvv 五、項目學(xué)做五、項目學(xué)做n 異常處理的一般格式:異常處理的一般格式:Java的異常處理機制使得處理的異常處理機制使得處理異常的代碼和異常的代碼和“常規(guī)常規(guī)”代碼分開,減少了代碼的數(shù)量,增代碼分開,減少了代碼的數(shù)量,增強了程序的可讀性強了程序的可讀性(

42、可以對比用可以對比用if語句來處理異常的情形,語句來處理異常的情形,這時需要進行一系列條件的判定這時需要進行一系列條件的判定)。try Java statement;catche (ExceptionType1 ExceptionObject) Exception1 handling;catche (ExceptionType2 ExceptionObject) Exception2 handling; finally final handling; /統(tǒng)一的出口統(tǒng)一的出口,最終必定要執(zhí)行最終必定要執(zhí)行總結(jié)總結(jié)n Java的異常處理機制使得異常事件可以沿調(diào)用堆棧自動的異常處理機制使得異常事件可以沿調(diào)用堆棧自動向上傳播,沿著被調(diào)用的順序往

溫馨提示

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

評論

0/150

提交評論