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

下載本文檔

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

文檔簡介

1、第十三章 -使用異常處理程序錯誤使用異常處理程序錯誤回顧回顧/public interface Introduceable public String detail();public void introduction()private void showMessage();void speak();Java接口中的方法必須是接口中的方法必須是publicJava接口中不能有方法體實現(xiàn)接口中不能有方法體實現(xiàn) 編譯器會自動加上編譯器會自動加上public修飾符修飾符請指出下列Java代碼中的錯誤。回顧回顧/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); 請指出下列Java代碼中的錯誤。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í)目標學(xué)習(xí)目標n掌握Java的異常處理機制運用 try 、catch 、 finally 處理異常運用 throw 拋出異常運用 throws 聲明異常/生活中的異常生活中的異常n正常情況下,小王每日開車去上班,耗時大約30分鐘/l但是,異常情況遲早要發(fā)生!一路暢通一路暢通堵車!堵車!撞車!撞車!程序中的異常程序中的異常/public class Hello public static void main(String args) Sys

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

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

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

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

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

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

11、段對異常進行處理的代碼段/ 代碼段代碼段第一種情況第一種情況 try/catch塊塊7-2n使用示例模擬第一種情況:/public class Exception 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

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編程編程歡迎提出建議歡迎提出建議!控制臺輸出控制臺輸出try/catch塊塊7-3n使用try/catch塊捕獲異常,分為三種情況:/trycatch異常類型匹配異常類型匹配 try/catch 塊后的代碼段塊后的代碼段進入進入catc

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

14、tring 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:System.out.println(SQL基礎(chǔ)基礎(chǔ)); catch (Exception ex) System.ou

15、t.println(輸入不為數(shù)字輸入不為數(shù)字!); ex.printStackTrace();System.out.println(歡迎提出建議歡迎提出建議!);輸入:輸入:B輸入不為數(shù)字輸入不為數(shù)字!異常堆棧信息異常堆棧信息歡迎提出建議歡迎提出建議!控制臺輸出控制臺輸出try/catch塊塊7-5nprintStackTrace的堆棧跟蹤功能顯示出程序運行到當前類的執(zhí)行流程 /public class Exception1 public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(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、斷運行程序中斷運行 發(fā)生異常發(fā)生異常public void method()try / 代碼段代碼段 1 / 產(chǎn)生異常的代碼段產(chǎn)生異常的代碼段 2 / 代碼段代碼段 3 catch (異常類型異常類型 ex) / 對異常進行處理的代碼段對異常進行處理的代碼段4/ 代碼段代碼段5第三種情況第三種情況 產(chǎn)生異常對象產(chǎn)生異常對象 try/catch塊塊7-7n使用示例模擬第三種情況:/public class Exception2 public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(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程序中斷運行程序中斷運行try/catch/finally 2-1n在try/catch塊后加入finally塊,可以確保無論是否發(fā)生異常,finally塊中的代碼總能被執(zhí)行/try 塊塊 finally 塊塊 catch 塊塊 無異常無異常 有異常有異常 try/catch/finally 2-2 /public class Exception3 public static void main(String args) System.out.print(請輸入課程代號請輸入課程代號(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編程編程歡迎提出建議歡迎提出建議!控制臺輸出控制臺輸出輸入:輸入:B輸入不為數(shù)字輸入不為數(shù)字!歡迎提出建議歡迎提出建議!第一種情況:第一種情況:無異常無異常第二種情況:第二種情況:有異常有異常 小結(jié)小結(jié) 1n編寫一個類ExceptionTest1,在main方法中使用try、catch、finally:在try塊中,編寫被0除的代碼在catch塊中,捕獲被0除所產(chǎn)生的異常,并且打印異常信息在finally塊中,打印一條語句/多重多重catch塊塊 2-1n一段代碼可能會引發(fā)多種類型的異常n當引發(fā)異常時,會按順序來查看每個 catch 語句,并執(zhí)行第一個與異常類型匹配的ca

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

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

25、ourse = in.nextInt(); /課程數(shù)目課程數(shù)目System.out.println(“S1各課程的平均學(xué)時為:各課程的平均學(xué)時為: + 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ā)生錯誤發(fā)生錯誤:+e.getMessa

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

27、b) try if(b0) throw new Exception(“除數(shù)不能為負數(shù)或除數(shù)不能為負數(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ù)不能為負數(shù)或負數(shù)或0 !控制臺輸出控制臺輸出聲明異常聲明異常/p

28、ublic class Calc public void div(int a,int b) throws Exception if(b=0) throw new Exception(除數(shù)不能為負數(shù)或除數(shù)不能為負數(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)用者捕獲異常 聲明該方法可能會產(chǎn)生異常聲明該方法可能會產(chǎn)生異常 聲明異常示例聲明異常示例/public class AccpTeacher private String id;/ 教員編號教員編號,長度應(yīng)為長度應(yīng)為7 public void setId(String pId) throws IllegalAr

溫馨提示

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

評論

0/150

提交評論