第13章、使用異常處理程序錯(cuò)誤_第1頁(yè)
第13章、使用異常處理程序錯(cuò)誤_第2頁(yè)
第13章、使用異常處理程序錯(cuò)誤_第3頁(yè)
第13章、使用異常處理程序錯(cuò)誤_第4頁(yè)
第13章、使用異常處理程序錯(cuò)誤_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第十三章 -使用異常處理程序錯(cuò)誤使用異常處理程序錯(cuò)誤回顧回顧/public interface Introduceable public String detail();public void introduction()private void showMessage();void speak();Java接口中的方法必須是接口中的方法必須是publicJava接口中不能有方法體實(shí)現(xiàn)接口中不能有方法體實(shí)現(xiàn) 編譯器會(huì)自動(dòng)加上編譯器會(huì)自動(dòng)加上public修飾符修飾符請(qǐng)指出下列Java代碼中的錯(cuò)誤?;仡櫥仡?public class Teacher implements Introduceable

2、 public void check(int x, int y) if(MAX=MIN) int m=0; m=MAX; MAX=MIN; MIN=m; System.out.println(最大值是最大值是:+MAX+“ 最小值是:最小值是:+MIN);else System.out.println(最大值是最大值是:+MAX+“ 最小值是:最小值是:+MIN); 請(qǐng)指出下列Java代碼中的錯(cuò)誤。public interface Introduceable int MAX=233;int MIN=122;public void check();public class Text public

3、 static void main(String args) Introduceable i=new Introduceable(); i.check();學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)n掌握J(rèn)ava的異常處理機(jī)制運(yùn)用 try 、catch 、 finally 處理異常運(yùn)用 throw 拋出異常運(yùn)用 throws 聲明異常/生活中的異常生活中的異常n正常情況下,小王每日開(kāi)車去上班,耗時(shí)大約30分鐘/l但是,異常情況遲早要發(fā)生!一路暢通一路暢通堵車!堵車!撞車!撞車!程序中的異常程序中的異常/public class Hello public static void main(String args) Sys

4、tem.out.print(請(qǐng)輸入課程代號(hào)請(qǐng)輸入課程代號(hào)(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.in);int courseCode = in.nextInt(); / 從鍵盤輸入整數(shù)從鍵盤輸入整數(shù)switch (courseCode) case 1:System.out.println(C#編程編程); break;case 2:System.out.println(Java編程編程); break;case 3:System.out.println(SQL基礎(chǔ)基礎(chǔ)); 輸入:輸入:2輸出:輸出:Java編程編程輸入:輸入:B程序

5、中斷運(yùn)行!程序中斷運(yùn)行!正常情況:正常情況:異常情況:異常情況:什么是異常什么是異常n異常就是在程序的運(yùn)行過(guò)程中所發(fā)生的不正常的事件,它會(huì)中斷正在運(yùn)行的程序nJava異常分為兩大類:錯(cuò)誤(Error):是指JVM系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況。程序員對(duì)此錯(cuò)誤一般無(wú)能為力。例外(Exception):則是指因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問(wèn)題例如:除數(shù)為0 要打開(kāi)的文件并不存在 在訪問(wèn)數(shù)組時(shí),數(shù)組的下標(biāo)值超過(guò)了數(shù)組容許的范圍。 原本預(yù)期用戶由鍵盤輸入的是整數(shù),但用戶輸入的卻是英文字母。/異常!異常!程序運(yùn)行程序運(yùn)行程序中斷運(yùn)行程序中斷運(yùn)行什么是異常什么是異常n面對(duì)異常該怎么辦呢?通常情況

6、下,我們會(huì)這樣處理:設(shè)計(jì)良好的程序應(yīng)該在異常發(fā)生時(shí)提供處理這些錯(cuò)誤的方法,使程序不會(huì)因?yàn)楫惓5陌l(fā)生而阻斷或產(chǎn)生不可見(jiàn)的結(jié)果。Java程序的執(zhí)行過(guò)程中如果出現(xiàn)異常事件,可以生產(chǎn)一個(gè)異常類對(duì)象,該異常對(duì)象封裝了異常事件的信息并將信息提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過(guò)程稱為拋出(throw)異常。當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋找能處理這個(gè)異常的代碼并把當(dāng)前異常對(duì)象交給其處理。這個(gè)過(guò)程稱為捕獲(catch)異常。/繞行或者等待繞行或者等待請(qǐng)求交警解決請(qǐng)求交警解決堵車!堵車!撞車!撞車!生活中,我們會(huì)根據(jù)不同的異常進(jìn)行相應(yīng)的處理,而不會(huì)就此中斷我們的生活生活中,我們會(huì)根據(jù)不同的異常進(jìn)行相應(yīng)的處

7、理,而不會(huì)就此中斷我們的生活/Java內(nèi)置異常類的結(jié)構(gòu)內(nèi)置異常類的結(jié)構(gòu) 9ObjectThrowableErrorExceptionClassNotFoundExceptionSQLExceptionRuntimeExceptionNullPointerExceptionArithmeticException/常見(jiàn)的異常類常見(jiàn)的異常類-110異常描述 Exception用戶程序可捕捉的異常體系結(jié)構(gòu)的根類RuntimeExceptionjava.lang包中多數(shù)異常的基類ArithmeticException算術(shù)異常,如除以0IllegalArgumentException方法收到非法參數(shù)Arr

8、ayIndexOutOfBoundsException數(shù)組下標(biāo)出界NullPointerException空指針異常(試圖訪問(wèn)null對(duì)象的引用)SecurityException試圖違反安全性InputMismatchException輸入不匹配異常ClassNotFoundException不能加載請(qǐng)求的類/常見(jiàn)的異常類常見(jiàn)的異常類-211異常描述 NumberFormatException從字符串到數(shù)字格式的非法轉(zhuǎn)換AWTExceptionAWT中的異常IOExceptionI/O異常的根類FileNotFoundException不能找到文件EOFException文件已經(jīng)結(jié)束Ille

9、galAccesException對(duì)類的訪問(wèn)被拒絕NoSuchMethodException請(qǐng)求的方法不存在InterruptedException線程中斷什么是異常處理什么是異常處理nJava編程語(yǔ)言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力/程序中預(yù)先想好了程序中預(yù)先想好了 對(duì)付異常的處理辦法對(duì)付異常的處理辦法 異常!異常! 程序運(yùn)行程序運(yùn)行處理完畢,程序繼續(xù)運(yùn)行處理完畢,程序繼續(xù)運(yùn)行對(duì)異常進(jìn)行處理對(duì)異常進(jìn)行處理Java中如何進(jìn)行異常處理中如何進(jìn)行異常處理nJava的異常處理是通過(guò)5個(gè)關(guān)鍵字來(lái)實(shí)現(xiàn)的:try、catch、 finally、throw、throws/ 捕獲異常捕獲異常 cat

10、chtryfinally執(zhí)行可能產(chǎn)生執(zhí)行可能產(chǎn)生 異常的代碼異常的代碼 捕獲異常捕獲異常 無(wú)論是否發(fā)生異常,無(wú)論是否發(fā)生異常,代碼總能執(zhí)行代碼總能執(zhí)行手動(dòng)拋出異常手動(dòng)拋出異常 拋出異常拋出異常 throw聲明異常聲明異常 聲明方法可能要聲明方法可能要拋出的各種異常拋出的各種異常 throwstry/catch塊塊7-1n使用try/catch塊捕獲異常,分為三種情況:/trycatch try/catch 塊后的代碼段塊后的代碼段public void method()try / 代碼段代碼段(此處不會(huì)產(chǎn)生異常此處不會(huì)產(chǎn)生異常) catch (異常類型異常類型 ex) / 對(duì)異常進(jìn)行處理的代碼

11、段對(duì)異常進(jìn)行處理的代碼段/ 代碼段代碼段第一種情況第一種情況 try/catch塊塊7-2n使用示例模擬第一種情況:/public class Exception public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)請(qǐng)輸入課程代號(hào)(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System.out.println(C#編程編程); break

12、;case 2: System.out.println(Java編程編程); break;case 3: System.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (Exception ex) System.out.println(輸入不為數(shù)字輸入不為數(shù)字!);System.out.println(歡迎提出建議歡迎提出建議!);輸入:輸入:2Java編程編程歡迎提出建議歡迎提出建議!控制臺(tái)輸出控制臺(tái)輸出try/catch塊塊7-3n使用try/catch塊捕獲異常,分為三種情況:/trycatch異常類型匹配異常類型匹配 try/catch 塊后的代碼段塊后的代碼段進(jìn)入進(jìn)入catc

13、h塊塊public void method()try / 代碼段代碼段 1 / 產(chǎn)生異常的代碼段產(chǎn)生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段4/ 代碼段代碼段5第二種情況第二種情況 產(chǎn)生異常對(duì)象產(chǎn)生異常對(duì)象 程序繼續(xù)執(zhí)行程序繼續(xù)執(zhí)行異常是一種特殊的對(duì)象,異常是一種特殊的對(duì)象,類型為類型為java.lang.Exception或其子類或其子類 發(fā)生異常發(fā)生異常try/catch塊塊7-4n使用示例模擬第二種情況:/public class Exception public static void main(S

14、tring args) System.out.print(請(qǐng)輸入課程代號(hào)請(qǐng)輸入課程代號(hào)(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:System.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (Exception ex) System.ou

15、t.println(輸入不為數(shù)字輸入不為數(shù)字!); ex.printStackTrace();System.out.println(歡迎提出建議歡迎提出建議!);輸入:輸入:B輸入不為數(shù)字輸入不為數(shù)字!異常堆棧信息異常堆棧信息歡迎提出建議歡迎提出建議!控制臺(tái)輸出控制臺(tái)輸出try/catch塊塊7-5nprintStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類的執(zhí)行流程 /public class Exception1 public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)請(qǐng)輸入課程代號(hào)(1至至3之間的數(shù)字之間的數(shù)字):

16、); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); /此處代碼省略此處代碼省略 catch (Exception ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!); ex.printStackTrace(); System.out.println(歡迎提出建議歡迎提出建議!); java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:840)at java.util.Scann

17、er.next(Scanner.java:1461)at java.util.Scanner.nextInt(Scanner.java:2091)at java.util.Scanner.nextInt(Scanner.java:2050)at s2jsp.sg.ch05.Exception1.main(Exception1.java:23)異常類型異常類型異常堆棧信息異常堆棧信息在此方法中拋出了異常在此方法中拋出了異常try/catch塊塊7-6n使用try/catch塊捕獲異常,分為三種情況:/trycatch異常類型不匹配異常類型不匹配 try/catch 塊后的代碼段塊后的代碼段程序中

18、斷運(yùn)行程序中斷運(yùn)行 發(fā)生異常發(fā)生異常public void method()try / 代碼段代碼段 1 / 產(chǎn)生異常的代碼段產(chǎn)生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段4/ 代碼段代碼段5第三種情況第三種情況 產(chǎn)生異常對(duì)象產(chǎn)生異常對(duì)象 try/catch塊塊7-7n使用示例模擬第三種情況:/public class Exception2 public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)請(qǐng)輸入課程代號(hào)(1至至3之間的數(shù)字之間的數(shù)字):

19、);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: System.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (NullPointerException ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!);System.out.println

20、(歡迎提出建議!歡迎提出建議!);輸入:輸入:B程序中斷運(yùn)行程序中斷運(yùn)行try/catch/finally 2-1n在try/catch塊后加入finally塊,可以確保無(wú)論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行/try 塊塊 finally 塊塊 catch 塊塊 無(wú)異常無(wú)異常 有異常有異常 try/catch/finally 2-2 /public class Exception3 public static void main(String args) System.out.print(請(qǐng)輸入課程代號(hào)請(qǐng)輸入課程代號(hào)(1至至3之間的數(shù)字之間的數(shù)字):);Scanner in =

21、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: System.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (Exception ex) System.out.println(輸入不為數(shù)字!輸入不為數(shù)字!); finally System.out.println(歡迎提出建議!歡迎提出建議!);

22、輸入:輸入:2Java編程編程歡迎提出建議歡迎提出建議!控制臺(tái)輸出控制臺(tái)輸出輸入:輸入:B輸入不為數(shù)字輸入不為數(shù)字!歡迎提出建議歡迎提出建議!第一種情況:第一種情況:無(wú)異常無(wú)異常第二種情況:第二種情況:有異常有異常 小結(jié)小結(jié) 1n編寫一個(gè)類ExceptionTest1,在main方法中使用try、catch、finally:在try塊中,編寫被0除的代碼在catch塊中,捕獲被0除所產(chǎn)生的異常,并且打印異常信息在finally塊中,打印一條語(yǔ)句/多重多重catch塊塊 2-1n一段代碼可能會(huì)引發(fā)多種類型的異常n當(dāng)引發(fā)異常時(shí),會(huì)按順序來(lái)查看每個(gè) catch 語(yǔ)句,并執(zhí)行第一個(gè)與異常類型匹配的ca

23、tch語(yǔ)句n執(zhí)行其中的一條 catch 語(yǔ)句之后,其后的 catch 語(yǔ)句將被忽略 /public void method()try / 代碼段代碼段 / 產(chǎn)生異常產(chǎn)生異常(異常類型異常類型2) catch (異常類型異常類型1 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段 catch (異常類型異常類型2 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段 catch (異常類型異常類型3 ex) / 對(duì)異常進(jìn)行處理的代碼段對(duì)異常進(jìn)行處理的代碼段/ 代碼段代碼段try 與異常類型與異常類型1不匹配不匹配try/catch 塊后的代碼段塊后的代碼段發(fā)生異常發(fā)生異常產(chǎn)生異常對(duì)象

24、產(chǎn)生異常對(duì)象catch與異常類型與異常類型2匹配匹配catchcatch程序繼續(xù)執(zhí)行程序繼續(xù)執(zhí)行進(jìn)入進(jìn)入catch塊塊多重多重catch塊塊 2-2/public class Exception4 public static void main(String args) Scanner in = new Scanner(System.in);trySystem.out.print(“請(qǐng)輸入請(qǐng)輸入S1的總學(xué)時(shí):的總學(xué)時(shí):);int totalTime = in.nextInt(); /總學(xué)時(shí)總學(xué)時(shí)System.out.print(“請(qǐng)輸入請(qǐng)輸入S1的課程數(shù)目:的課程數(shù)目:);int totalC

25、ourse = in.nextInt(); /課程數(shù)目課程數(shù)目System.out.println(“S1各課程的平均學(xué)時(shí)為:各課程的平均學(xué)時(shí)為: + totalTime / totalCourse); catch (InputMismatchException e1) System.out.println(輸入不為數(shù)字輸入不為數(shù)字!); catch (ArithmeticException e2) System.out.println(課程數(shù)目不能為零課程數(shù)目不能為零!); catch (Exception e) System.out.println(發(fā)生錯(cuò)誤發(fā)生錯(cuò)誤:+e.getMessa

26、ge();輸入:輸入:270 H 在安排在安排catch語(yǔ)句的順序時(shí),首先應(yīng)該捕獲最特殊的異常,語(yǔ)句的順序時(shí),首先應(yīng)該捕獲最特殊的異常, 然后再逐漸一般化,即先子類后父類然后再逐漸一般化,即先子類后父類 輸出:輸出:輸入不為數(shù)字輸入不為數(shù)字!進(jìn)入第一個(gè)進(jìn)入第一個(gè)catch塊塊輸入:輸入:270 0 輸出:輸出:課程數(shù)目不能為零課程數(shù)目不能為零!進(jìn)入第二個(gè)進(jìn)入第二個(gè)catch塊塊拋出異常拋出異常n屬于運(yùn)行期的異常類型會(huì)由Java虛擬機(jī)自動(dòng)拋出,但有些我們自己定義的異常類型,則要通過(guò)throw關(guān)鍵字顯式拋出。/public class Calc public void div(int a,int

27、b) try if(b0) throw new Exception(“除數(shù)不能為負(fù)數(shù)或除數(shù)不能為負(fù)數(shù)或0!); else System.out .println(a+/+b+=+(a/b); catch (Exception e) System.out.println(e.getMessage(); public class Test public static void main(String args) Calc calc = new Calc(); calc.div(12,0);拋出異常拋出異常捕獲異常捕獲異常除數(shù)不能為除數(shù)不能為負(fù)數(shù)或負(fù)數(shù)或0 !控制臺(tái)輸出控制臺(tái)輸出聲明異常聲明異常/p

28、ublic class Calc public void div(int a,int b) throws Exception if(b=0) throw new Exception(除數(shù)不能為負(fù)數(shù)或除數(shù)不能為負(fù)數(shù)或0); else System.out .println(a+/+b+=+(a/b); public class TeacherTest public static void main(String args) Calc calc = new Calc(); try t1.div(12,-3); catch (Exception e) System.out.println(e.getMessage(); 由調(diào)用者捕獲異常由調(diào)用者捕獲異常 聲明該方法可能會(huì)產(chǎn)生異常聲明該方法可能會(huì)產(chǎn)生異常 聲明異常示例聲明異常示例/public class AccpTeacher private String id;/ 教員編號(hào)教員編號(hào),長(zhǎng)度應(yīng)為長(zhǎng)度應(yīng)為7 public void setId(String pId) throws IllegalAr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論