




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第6章章 JAVA異常處理異常處理Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理第第6章章 JAVA異常處理異常處理6.1 異常的概念異常的概念6.2 異常處理異常處理6.3 自定義異常自定義異常Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理生活中的異常生活中的異常正常情況下,小王每日開車去上班,耗時大約正常情況下,小王每日開車去上班,耗時大約30分鐘分鐘但是,異常情況遲早要發(fā)生!但是,異常情況遲早要發(fā)生!一路暢通一路暢通堵車!堵車!撞車!撞車!Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理什么是異常什么是異常異常就是在程序的運(yùn)行過程中所發(fā)生的
2、不正常的事件,它會異常就是在程序的運(yùn)行過程中所發(fā)生的不正常的事件,它會中斷正在運(yùn)行的程序中斷正在運(yùn)行的程序繞行或者等待繞行或者等待請求交警解決請求交警解決異常!異常!面對異常該怎么辦呢?通常情況下,我們會這樣處理:面對異常該怎么辦呢?通常情況下,我們會這樣處理:程序運(yùn)行程序運(yùn)行程序中斷運(yùn)行程序中斷運(yùn)行堵車!堵車!撞車!撞車!生活中,我們會根據(jù)不同的異常進(jìn)行相應(yīng)的處理,生活中,我們會根據(jù)不同的異常進(jìn)行相應(yīng)的處理,而不會就此中斷我們的生活而不會就此中斷我們的生活Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理6.1 異常的概念異常的概念1.1.什么是異常?什么是異常? 異常是在程序運(yùn)
3、行過程中所發(fā)生的破壞了正常異常是在程序運(yùn)行過程中所發(fā)生的破壞了正常的指令流程的事件。軟件和硬件錯誤都可能導(dǎo)致的指令流程的事件。軟件和硬件錯誤都可能導(dǎo)致異常的產(chǎn)生。異常的產(chǎn)生。 程序運(yùn)行出現(xiàn)異常時,程序運(yùn)行出現(xiàn)異常時,JavaJava運(yùn)行環(huán)境就用異常運(yùn)行環(huán)境就用異常類類ExceptionException的相應(yīng)子類創(chuàng)建一個異常對象,并等的相應(yīng)子類創(chuàng)建一個異常對象,并等待處理待處理Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理程序中的異常程序中的異常public class ExcepNoCatch public static void main(String args) int
4、i = 0;String greetings = Hello world!, No, I mean it!, HELLO WORLD! ; while (i 4) System. out. println (greetings i); i+; Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理什么是異常處理什么是異常處理Java編程語言使用異常處理機(jī)制為程序提供了錯誤編程語言使用異常處理機(jī)制為程序提供了錯誤處理的能力處理的能力程序中預(yù)先想好了程序中預(yù)先想好了 對付異常的處理辦法對付異常的處理辦法 異常!異常! 程序運(yùn)行程序運(yùn)行處理完畢,程序繼續(xù)運(yùn)行處理完畢,程序繼續(xù)運(yùn)行對異常進(jìn)行處
5、理對異常進(jìn)行處理Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理2Java處理異常的機(jī)制處理異常的機(jī)制異常處理可分為以下幾個步驟異常處理可分為以下幾個步驟: :1 1)拋出異常拋出異常:當(dāng)方法中有一個錯誤發(fā)生后,該方法:當(dāng)方法中有一個錯誤發(fā)生后,該方法創(chuàng)建一個異常對象并把它交給運(yùn)行時系統(tǒng)。創(chuàng)建一個異常對象并把它交給運(yùn)行時系統(tǒng)。2 2)捕獲異常:捕獲異常: 運(yùn)行時系統(tǒng)在方法調(diào)用堆棧里為被運(yùn)行時系統(tǒng)在方法調(diào)用堆棧里為被拋出的異常查找處理代碼。拋出的異常查找處理代碼。3 3)異常處理:異常處理:通過方法調(diào)用來處理異常通過方法調(diào)用來處理異常4 4)異常終止:異常終止:如果運(yùn)行時系統(tǒng)在方法
6、調(diào)用棧查遍了如果運(yùn)行時系統(tǒng)在方法調(diào)用棧查遍了所有的方法而未找到合適的異常處理程序,則運(yùn)所有的方法而未找到合適的異常處理程序,則運(yùn)行是系統(tǒng)終止執(zhí)行。行是系統(tǒng)終止執(zhí)行。Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理2Java處理異常的機(jī)制處理異常的機(jī)制異常發(fā)生異常發(fā)生拋出拋出異常異常JAVA虛虛擬機(jī)擬機(jī)強(qiáng)強(qiáng)制制拋拋出出生生動動自自成成異常類異常類對象對象異常處理異常處理代碼代碼捕獲捕獲異常異常捕捕獲獲異異常常異常類異常類對象對象終 止終 止程序程序Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理2Java處理異常的機(jī)制處理異常的機(jī)制可以靈活的處理異常,如果當(dāng)前方法有能
7、力處理異可以靈活的處理異常,如果當(dāng)前方法有能力處理異常,就捕獲并處理它,否則只需拋出異常,由方法常,就捕獲并處理它,否則只需拋出異常,由方法調(diào)用者來處理它。調(diào)用者來處理它。異常流程的代碼和正常流程的代碼分離,提高了程異常流程的代碼和正常流程的代碼分離,提高了程序的可讀性,簡化了程序的結(jié)構(gòu)。序的可讀性,簡化了程序的結(jié)構(gòu)。Java處理異常的機(jī)制的特點(diǎn):處理異常的機(jī)制的特點(diǎn):用用JavaJava類來表示異常情況,這種類被稱為異常類。類來表示異常情況,這種類被稱為異常類。把異常情況表示成異常類,可以充分發(fā)揮類的可擴(kuò)把異常情況表示成異常類,可以充分發(fā)揮類的可擴(kuò)展和可重用的優(yōu)勢。展和可重用的優(yōu)勢。Java
8、程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理JavaJava中異常類的結(jié)構(gòu)中異常類的結(jié)構(gòu)Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理Java中如何進(jìn)行異常處理中如何進(jìn)行異常處理Java的異常處理是通過的異常處理是通過5個關(guān)鍵字來實現(xiàn)的:個關(guān)鍵字來實現(xiàn)的:try、catch、 finally、throw、throws 捕獲異常捕獲異常 catchtryfinally執(zhí)行可能產(chǎn)生執(zhí)行可能產(chǎn)生 異常的代碼異常的代碼 捕獲異常捕獲異常 無論是否發(fā)生異常,無論是否發(fā)生異常,代碼總能執(zhí)行代碼總能執(zhí)行手動拋出異常手動拋出異常 拋出異常拋出異常 throw聲明異常聲明異常 聲明方法
9、可能要聲明方法可能要拋出的各種異常拋出的各種異常 throwsJava程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理try/catch塊塊-1trycatch try/catch 塊后的代碼段塊后的代碼段public void method()try / 代碼段代碼段(此處不會產(chǎn)生異常此處不會產(chǎn)生異常) catch (異常類型異常類型 ex) / 對異常進(jìn)行處理的代碼段對異常進(jìn)行處理的代碼段/ 代碼段代碼段使用使用try/catch塊捕獲異常,分為三種情況:塊捕獲異常,分為三種情況:第一種情況第一種情況 Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理try/catch塊
10、塊-2使用示例模擬第一種情況:使用示例模擬第一種情況:public class MyException public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System.out.println(C#編程編程); break;case 2: System.out.println(Ja
11、va編程編程); break;case 3: System.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (Exception ex) System.out.println(輸入不為數(shù)字輸入不為數(shù)字!);System.out.println(歡迎提出建議歡迎提出建議!);輸入:輸入:2Java編程編程歡迎提出建議歡迎提出建議!控制臺輸出控制臺輸出Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理try/catch塊塊-3trycatch異常類型匹配異常類型匹配 try/catch 塊后的代碼段塊后的代碼段進(jìn)入進(jìn)入catch塊塊public void method()try
12、 / 代碼段代碼段 1 / 產(chǎn)生異常的代碼段產(chǎn)生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對異常進(jìn)行處理的代碼段對異常進(jìn)行處理的代碼段4/ 代碼段代碼段5使用使用try/catch塊捕獲異常,分為三種情況:塊捕獲異常,分為三種情況:第二種情況第二種情況 產(chǎn)生異常對象產(chǎn)生異常對象 程序繼續(xù)執(zhí)行程序繼續(xù)執(zhí)行異常是一種特殊的對象,異常是一種特殊的對象,類型為類型為java.lang.Exception或其子類或其子類 發(fā)生異常發(fā)生異常Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理try/catch塊塊-4使用示例模擬第二種情況:使用示例模擬第
13、二種情況:public class MyException public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1:System.out.println(C#編程編程);break;case 2:System.out.println(Java編程編程);break;case 3:Syst
14、em.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (Exception ex) System.out.println(輸入不為數(shù)字輸入不為數(shù)字!); ex.printStackTrace();System.out.println(歡迎提出建議歡迎提出建議!);輸入:輸入:B輸入不為數(shù)字輸入不為數(shù)字!異常堆棧信息異常堆棧信息歡迎提出建議歡迎提出建議!控制臺輸出控制臺輸出Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理printStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類的執(zhí)行流程類的執(zhí)行流程public class MyEx
15、ception public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(shù)字):); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); /此處代碼省略此處代碼省略 catch (Exception ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!); ex.printStackTrace(); System.out.println(歡迎提出建議歡迎提出建議!); try/
16、catch塊塊-5java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:840)at java.util.Scanner.next(Scanner.java:1461)at java.util.Scanner.nextInt(Scanner.java:2091)at java.util.Scanner.nextInt(Scanner.java:2050)at s2jsp.sg.ch05. MyException.main(MyException.java:23)異常類型異常類型異常堆棧信息異常堆棧信
17、息在此方法中拋出了異常在此方法中拋出了異常Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理try/catch塊塊-6trycatch異常類型不匹配異常類型不匹配 try/catch 塊后的代碼段塊后的代碼段程序中斷運(yùn)行程序中斷運(yùn)行 發(fā)生異常發(fā)生異常public void method()try / 代碼段代碼段 1 / 產(chǎn)生異常的代碼段產(chǎn)生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對異常進(jìn)行處理的代碼段對異常進(jìn)行處理的代碼段4/ 代碼段代碼段5使用使用try/catch塊捕獲異常,分為三種情況:塊捕獲異常,分為三種情況:第三種情況第三種情
18、況 產(chǎn)生異常對象產(chǎn)生異常對象 Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理try/catch塊塊-7使用示例模擬第三種情況:使用示例模擬第三種情況:public class MyException2 public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System
19、.out.println(C#編程編程); break;case 2: System.out.println(Java編程編程); break;case 3: System.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (NullPointerException ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!);System.out.println(歡迎提出建議!歡迎提出建議!);輸入:輸入:B程序中斷運(yùn)行程序中斷運(yùn)行Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理finally語句語句finally語句定義一個總是被執(zhí)行的代碼塊,而不管有沒
20、有出語句定義一個總是被執(zhí)行的代碼塊,而不管有沒有出現(xiàn)異常。現(xiàn)異常。public void work() try 開門 工作8個小時 /可能會拋出異常 catch(DiseaseException e) 去醫(yī)院看病; finally 關(guān)門 public void work() try 開門 工作8個小時/可能會拋出異常 關(guān)門 catch(DiseaseException e) 去醫(yī)院看病; Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理try/catch/finally -1在在try/catch塊后加入塊后加入finally塊,可以確保無論是否發(fā)生異常,塊,可以確保無論是否發(fā)生
21、異常,finally塊中的代碼總能被執(zhí)行塊中的代碼總能被執(zhí)行try 塊塊 finally 塊塊 catch 塊塊 無異常無異常 有異常有異常 Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理try/catch/finally-2 public class MyException3 public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextI
22、nt();switch (courseCode) case 1: System.out.println(C#編程編程); break;case 2: System.out.println(Java編程編程); break;case 3: System.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (Exception ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!); finally System.out.println(歡迎提出建議!歡迎提出建議!);輸入:輸入:2Java編程編程歡迎提出建議歡迎提出建議!控制臺輸出控制臺輸出輸入:輸入:B輸入不為數(shù)字輸
23、入不為數(shù)字!歡迎提出建議歡迎提出建議!第一種情況:第一種情況:無異常無異常第二種情況:第二種情況:有異常有異常 Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理編寫一個類編寫一個類ExceptionTest1,在,在main方法中使方法中使用用try、catch、finally: 在try塊中,編寫被0除的代碼 在catch塊中,捕獲被0除所產(chǎn)生的異常,并且打印異常信息 在finally塊中,打印一條語句Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理多重多重catch塊塊-1一段代碼可能會引發(fā)多種類型的異常一段代碼可能會引發(fā)多種類型的異常當(dāng)引發(fā)異常時,會按順序來查
24、看每個當(dāng)引發(fā)異常時,會按順序來查看每個 catch 語句,語句,并執(zhí)行第一個與異常類型匹配的并執(zhí)行第一個與異常類型匹配的catch語句語句執(zhí)行其中的一條執(zhí)行其中的一條 catch 語句之后,其后的語句之后,其后的 catch 語句將被忽略語句將被忽略Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理public void method()try / 代碼段代碼段 / 產(chǎn)生異常產(chǎn)生異常(異常類型異常類型2) catch (異常類型異常類型1 ex) / 對異常進(jìn)行處理的代碼段對異常進(jìn)行處理的代碼段 catch (異常類型異常類型2 ex) / 對異常進(jìn)行處理的代碼段對異常進(jìn)行處理的代
25、碼段 catch (異常類型異常類型3 ex) / 對異常進(jìn)行處理的代碼段對異常進(jìn)行處理的代碼段/ 代碼段代碼段多重多重catch塊塊 -2try 與異常類型與異常類型1不匹配不匹配try/catch 塊后的代碼段塊后的代碼段發(fā)生異常發(fā)生異常產(chǎn)生異常對象產(chǎn)生異常對象catch與異常類型與異常類型2匹配匹配catchcatch程序繼續(xù)執(zhí)行程序繼續(xù)執(zhí)行進(jìn)入進(jìn)入catch塊塊Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理多重多重catch塊塊-3public class MyException4 public static void main(String args) Scanner
26、 in = new Scanner(System.in);trySystem.out.print(“請輸入互聯(lián)網(wǎng)專業(yè)的總學(xué)時:請輸入互聯(lián)網(wǎng)專業(yè)的總學(xué)時:);int totalTime = in.nextInt(); /總學(xué)時總學(xué)時System.out.print(“請輸入互聯(lián)網(wǎng)專業(yè)的課程數(shù)目:請輸入互聯(lián)網(wǎng)專業(yè)的課程數(shù)目:);int totalCourse = in.nextInt(); /課程數(shù)目課程數(shù)目System.out.println(“互聯(lián)網(wǎng)專業(yè)的各課程的平均學(xué)時為:互聯(lián)網(wǎng)專業(yè)的各課程的平均學(xué)時為: + totalTime / totalCourse); catch (InputMis
27、matchException e1) System.out.println(輸入不為數(shù)字輸入不為數(shù)字!); catch (ArithmeticException e2) System.out.println(課程數(shù)目不能為零課程數(shù)目不能為零!); catch (Exception e) System.out.println(發(fā)生錯誤發(fā)生錯誤:+e.getMessage();輸入:輸入:270 H 在安排在安排catch語句的順序時,首先應(yīng)該捕獲最特殊的異常,語句的順序時,首先應(yīng)該捕獲最特殊的異常, 然后再逐漸一般化,即先子類后父類然后再逐漸一般化,即先子類后父類 輸出:輸出:輸入不為數(shù)字輸入不
28、為數(shù)字!進(jìn)入第一個進(jìn)入第一個catch塊塊輸入:輸入:270 0 輸出:輸出:課程數(shù)目不能為零課程數(shù)目不能為零!進(jìn)入第二個進(jìn)入第二個catch塊塊Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理聲明異常聲明異常如果一個方法不想處理異常,或者異常沒有在當(dāng)前如果一個方法不想處理異常,或者異常沒有在當(dāng)前的的try catch中處理,則它必須將異常拋棄給上一中處理,則它必須將異常拋棄給上一級調(diào)用它的方法。級調(diào)用它的方法。可以通過可以通過throws 語句將異常拋語句將異常拋向上級調(diào)用方法。向上級調(diào)用方法。如果異常被回溯到如果異常被回溯到main方法仍舊沒有處理,則程序方法仍舊沒有處理,則
29、程序?qū)⒊鲥e,終止運(yùn)行。將出錯,終止運(yùn)行。Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理聲明異常聲明異常public class ExTester static int method1(int x) throws Exception if(x0)throw new Exception(x0); return +x; static int method2(int x)throws Exception return method1(x); public static void main(String args)throws Exception System.out.println(m
30、ethod2(-1); main()method2()method1()方法調(diào)用堆棧異常處理采用堆棧機(jī)制Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理聲明異常聲明異常public class Teacher private String id;/ 教師編號教師編號,長度應(yīng)為長度應(yīng)為7 public void setId(String pId) throws IllegalArgumentException / 判斷教師編號的長度是否為判斷教師編號的長度是否為7 if (pId.length() = 7) id = pId; else throw new IllegalArgum
31、entException(參數(shù)長度應(yīng)為參數(shù)長度應(yīng)為7!); public class TeacherTest public static void main(String args) Teacher teacher = new Teacher();try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 由調(diào)用者捕獲異常由調(diào)用者捕獲異常 聲明該方法可能會產(chǎn)生異常聲明該方法可能會產(chǎn)生異常 Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理拋出異常拋出異
32、常在JAVA程序中,引發(fā)異常共有以下兩種方式l使用顯式 throw 語句來引發(fā)異常。在此情況下,控制權(quán)將無條件轉(zhuǎn)到處理異常的部分代碼l使用語句或表達(dá)式在執(zhí)行過程中激發(fā)了某個異常的條件,使得操作無法正常結(jié)束,從而引發(fā)異常throw語句用于立即無條件地引發(fā)異常,語法格式為:throw 異常對象;Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理拋出異常拋出異常如果在當(dāng)前環(huán)境無法解決一個異常,就要將其拋出,把異常如果在當(dāng)前環(huán)境無法解決一個異常,就要將其拋出,把異常交給調(diào)用者處理交給調(diào)用者處理 public class Teacher private String id; / 教師編號,長
33、度應(yīng)為教師編號,長度應(yīng)為7 public void setId(String pId) / 判斷教師編號的長度是否為判斷教師編號的長度是否為7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(參數(shù)長度應(yīng)為參數(shù)長度應(yīng)為7!); public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgume
34、ntException ex) System.out.println(ex.getMessage(); 拋出異常拋出異常捕獲異常捕獲異常參數(shù)長度應(yīng)為參數(shù)長度應(yīng)為7!控制臺輸出控制臺輸出Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理編寫類編寫類ExceptionTest2: 定義兩個方法:go()和main() 在go方法中聲明要拋出異常,在該方法體內(nèi),拋出一個Exception對象 在main()方法中,調(diào)用go方法,使用try/catch捕獲go方法中拋出的異常Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理自定義異常類自定義異常類使用自定義異常的步驟:使用自定
35、義異常的步驟:1.通過繼承通過繼承java.lang.Exception類聲明自己的異常類;類聲明自己的異常類;2.在方法中生成自定義異常的實例,并用在方法中生成自定義異常的實例,并用throw語句拋出;語句拋出;3.在方法的聲明部分用在方法的聲明部分用throws語句聲明該方法可能拋出的異語句聲明該方法可能拋出的異常常import java.io.* ;class MyException extends Exception private int id ; public MyException(String message ,int id) super(message) ; this.id
36、= id ; public int getId() return id ; Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理public class TestMyException public void regist(int num) throws MyException if(num 0) throw new MyException(人數(shù)不能為負(fù)值人數(shù)不能為負(fù)值,3) ; System.out.println(人數(shù):人數(shù): + num) ; public void manager() try regist(-100) ; catch(MyException e) System
37、.out.println(錯誤!錯誤代碼:錯誤!錯誤代碼: + e.getId() ; e.printStackTrace() ; System.out.println(操作結(jié)束操作結(jié)束) ; public static void main(String args) TestMyException t = new TestMyException() ; t.manager() ; Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理用戶定義異常用戶定義異常用戶定義異常是通過擴(kuò)展用戶定義異常是通過擴(kuò)展Exception類或類或RuntimeException來創(chuàng)建的。來創(chuàng)建的。 cla
38、ss AnswerWrongException extends Exception private int result; public AnswerWrongException (int result) this.result=result; public int getResult() return result; Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理用戶定義異常用戶定義異常public class ExceptionTester public static void test(int x,int y,int z)throws AnswerWrongExcepti
39、on if(x+y!=z) throw new AnswerWrongException(z); System.out.println(x+y+=+z); public static void main(String args) try test(1,2,5); System.out.println(end); catch( AnswerWrongException e) System.out.println(result is wrong:+e.getResult(); e.printStackTrace(); Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理獲得異常信息獲得異
40、常信息Exception提供了如下方法:提供了如下方法: toString() getMessage() printStackTrace()try test(1,2,5); System.out.println(end); catch( AnswerWrongException e) e.printStackTrace(); Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理異常處理流程異常處理流程finally語句不被執(zhí)行的唯一情況是程序先執(zhí)行了終止程序的語句不被執(zhí)行的唯一情況是程序先執(zhí)行了終止程序的System.exit()方法方法public static void main
41、(String args) try System.out.println(Begin); System.exit(0); finally System.out.println(Finally); System.out.println(End);Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理異常處理流程異常處理流程public static void main(String args)throws Exception try System.out.println(Begin); new Sample().method1(-1); /出現(xiàn)出現(xiàn)SpecialException異常異常
42、 System.exit(0); catch(Exception e) System.out.println(Wrong); throw e; /如果把此行注釋掉,將得到不同的運(yùn)行結(jié)果如果把此行注釋掉,將得到不同的運(yùn)行結(jié)果 finally System.out.println(Finally); System.out.println(End);打印Begin Wrong Finallyjava.lang.SpecialException Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理異常處理流程異常處理流程public static int method1(int x) try
43、 if(x0)throw new Exception(x0); return x+; catch(Exception e) System.out.println(“Wrong); return -100; finally System.out.println(Finally); public static void main(String args) System.out.println( method1(-1)); 打印Wrong Finally-100Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理常見異常常見異常ArithmeticException:數(shù)學(xué)異常:數(shù)學(xué)異常in
44、t a=12 / 0; /拋出拋出ArithmeticExceptionNullPointerException:空指針異常:空指針異常Date d= null;System.out.println(d.toString(); /拋出拋出NullPointerExceptionArrayIndexOutOfBoundsException:下標(biāo)越界異常:下標(biāo)越界異常int array=new int4;array0=1; array7=1; /拋出拋出ArrayIndexOutOfBoundsExceptionClassCastException:類型轉(zhuǎn)換異常:類型轉(zhuǎn)換異常:Animal ani
45、mal=new Dog();Cat cat=(Animal)animal;Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理運(yùn)行時異常運(yùn)行時異常 RuntimeException類及其子類都稱為運(yùn)行時異常,這種異類及其子類都稱為運(yùn)行時異常,這種異常的特點(diǎn)是常的特點(diǎn)是Java編譯器不會檢查它,也就是說,當(dāng)程序中編譯器不會檢查它,也就是說,當(dāng)程序中可能出現(xiàn)這類異常,即使沒有用可能出現(xiàn)這類異常,即使沒有用try-catch語句捕獲它,也語句捕獲它,也沒有用沒有用throws子句聲明拋出它,也會編譯通過。例如當(dāng)以子句聲明拋出它,也會編譯通過。例如當(dāng)以下下divide()方法的參數(shù)方法的參數(shù)
46、b為為0,執(zhí)行,執(zhí)行“a/b”操作時會出現(xiàn)操作時會出現(xiàn)ArrithmeticException異常,它屬于運(yùn)行時異常,異常,它屬于運(yùn)行時異常,Java編編譯器不會檢查它:譯器不會檢查它:public int divide(int a,int b) return a/b; /當(dāng)參數(shù)當(dāng)參數(shù)b為為0,拋出,拋出ArrithmeticException Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理區(qū)分運(yùn)行時異常和受檢查異常區(qū)分運(yùn)行時異常和受檢查異常運(yùn)行時異常表示無法讓程序恢復(fù)運(yùn)行的異常,導(dǎo)致這種異常運(yùn)行時異常表示無法讓程序恢復(fù)運(yùn)行的異常,導(dǎo)致這種異常的原因通常是由于執(zhí)行了錯誤操作。一
47、旦出現(xiàn)了錯誤操作,的原因通常是由于執(zhí)行了錯誤操作。一旦出現(xiàn)了錯誤操作,建議終止程序,因此建議終止程序,因此Java編譯器不檢查這種異常。編譯器不檢查這種異常。 public void method(int array) for(int i=0;i=array.length;i+) /當(dāng)i的取值為array.length時,將拋出ArrayIndexOutOfBoundsException arrayi=1;public void method(int array) for(int i=0;iarray.length;i+) arrayi=1; /不會拋出ArrayIndexOutOfBound
48、sException修改程序代碼中的錯誤Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理區(qū)分運(yùn)行時異常和受檢查異常區(qū)分運(yùn)行時異常和受檢查異常受檢查異常表示程序可以處理的異常,如果拋出異常的方法本受檢查異常表示程序可以處理的異常,如果拋出異常的方法本身不能處理它,那么方法調(diào)用者應(yīng)該去處理它,從而使程身不能處理它,那么方法調(diào)用者應(yīng)該去處理它,從而使程序恢復(fù)運(yùn)行,不至于終止程序。序恢復(fù)運(yùn)行,不至于終止程序。 如果一個方法可能出現(xiàn)受檢查異常,要么用如果一個方法可能出現(xiàn)受檢查異常,要么用try-catch語句捕語句捕獲,要么用獲,要么用throws子句聲明將它拋出,否則會導(dǎo)致編譯錯子句聲明
49、將它拋出,否則會導(dǎo)致編譯錯誤。誤。 void method1() throws IOException /合法/編譯錯誤,必須捕獲或聲明拋出IOExceptionvoid method2() method1(); /合法,聲明拋出IOException void method3()throws IOException method1(); /合法,聲明拋出Exceptionvoid method4()throws Exception method1(); /合法,捕獲IOException void method5() try method1(); catch(IOException e)Java程序設(shè)計程序設(shè)計 第第6章章 JAVA異常處理異常處理程序調(diào)試程序調(diào)試9-1令狐沖鍥而不舍地練,但還是不令人滿意。怎么回事呢?令狐沖鍥而不舍地練,但還是不令人滿意。怎么回事呢?他仔細(xì)地分析,哪一步出錯了呢?他仔細(xì)地分析,哪一步出錯了呢?歌唱得不好?鋼琴演奏不過關(guān)?歌唱得不好?鋼琴演奏不過關(guān)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 抗過敏藥的3大關(guān)鍵點(diǎn)
- 學(xué)校病事假管理制度
- 學(xué)校足球組管理制度
- 學(xué)生返鄉(xiāng)后管理制度
- 完善與優(yōu)化管理制度
- 定置目視化管理制度
- 實訓(xùn)室柴油管理制度
- 審車站員工管理制度
- 客運(yùn)危險源管理制度
- 家樂福存貨管理制度
- 外研版高一英語必修一重點(diǎn)總結(jié)
- 腰椎間盤突出癥的診斷、鑒別診斷與分型
- 02 微電子制造裝備概述
- 價值流圖析VSM(美的資料)
- 手足口病培訓(xùn)課件(ppt)
- LD型單梁起重機(jī)使用說明書
- 測試案例附錄DTX1800使用
- 實習(xí)生推薦信
- 關(guān)于德國能源轉(zhuǎn)型的十二個見解
- 內(nèi)蒙古自治區(qū)公路工程施工企業(yè)信用評價管理實施細(xì)則
- 在全市文物保護(hù)員培訓(xùn)班上的講話
評論
0/150
提交評論