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

下載本文檔

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

文檔簡介

1、第十章第十章 理論理論 異常處理異常處理課程回顧課程回顧u多態(tài)是指一個對外接口,多種實現(xiàn)方式,即一個接口使用不同實例執(zhí)行多態(tài)是指一個對外接口,多種實現(xiàn)方式,即一個接口使用不同實例執(zhí)行不同的操作不同的操作 ,它分為兩種,它分為兩種方法重載和方法重寫方法重載和方法重寫u方法重載是指在一個類的內(nèi)部提供同名方法,但方法的參數(shù)列表不同;方法重載是指在一個類的內(nèi)部提供同名方法,但方法的參數(shù)列表不同;方法返回類型不是區(qū)分方法重載的標(biāo)志方法返回類型不是區(qū)分方法重載的標(biāo)志u方法重寫發(fā)生在子父類繼承關(guān)系中,子類提供與父類同名方法,其方法方法重寫發(fā)生在子父類繼承關(guān)系中,子類提供與父類同名方法,其方法參數(shù)列表及返回類

2、型相同,子類重寫父類中的方法范圍不能比父類小參數(shù)列表及返回類型相同,子類重寫父類中的方法范圍不能比父類小u抽象類與抽象類與“模版模版”類似,抽象類用于繼承,抽象類不一定有抽象方法;類似,抽象類用于繼承,抽象類不一定有抽象方法;有抽象方法的類一定是抽象類有抽象方法的類一定是抽象類u接口是一種特殊的類,是一系列方法或特征的聲明;接口可以定義常量接口是一種特殊的類,是一系列方法或特征的聲明;接口可以定義常量和抽象方法;接口允許多繼承和抽象方法;接口允許多繼承本章內(nèi)容本章內(nèi)容u異常的概念異常的概念u異常類的分類異常類的分類u程序中的異常處理程序中的異常處理u自定義的異常類自定義的異常類本章目標(biāo)本章目標(biāo)

3、u理解異常的概念理解異常的概念u掌握掌握JavaJava中異常類的繼承結(jié)構(gòu)中異常類的繼承結(jié)構(gòu)u掌握在掌握在JavaJava中如何對程序進行異常處理中如何對程序進行異常處理u掌握自定義異常類的創(chuàng)建和使用掌握自定義異常類的創(chuàng)建和使用1.1.異常概述異常概述public class Demo public int div(int firstNum,int secondNum) return firstNum/secondNum; public static void main(String args)Demo demo = new Demo();int firstNum = Integer.pars

4、eInt(args0);int secondNum = Integer.parseInt(args1); System.out.println(demo.div(firstNum, secondNum);除數(shù)可以為零除數(shù)可以為零?除數(shù)為零時產(chǎn)生異常除數(shù)為零時產(chǎn)生異常,中止程序運行中止程序運行 保證程序不因出現(xiàn)異常而中止運行,必須要對出現(xiàn)的異常進行處理保證程序不因出現(xiàn)異常而中止運行,必須要對出現(xiàn)的異常進行處理1.1 為什么需要異常處理為什么需要異常處理1.2 1.2 什么是異常什么是異常u現(xiàn)實生活中的異?,F(xiàn)實生活中的異常n每日開車去上班每日開車去上班, ,大約大約1515分鐘分鐘n異常情況時常發(fā)

5、生異常情況時常發(fā)生堵車!堵車!天氣狀況天氣狀況 不好!不好!正常情況正常情況 異常情況異常情況 程序異常程序異常u在在Java編程中,異常就是程序在運行過程中發(fā)生的錯誤。編程中,異常就是程序在運行過程中發(fā)生的錯誤。u異常若處理不當(dāng),它會終止程序的運行異常若處理不當(dāng),它會終止程序的運行如何處理異常?如何處理異常?等待、改道等待、改道慢行慢行堵車堵車天氣狀況差天氣狀況差處理異常處理異常 程序中預(yù)先設(shè)置程序中預(yù)先設(shè)置 異常的處理辦法異常的處理辦法 程序中出現(xiàn)異常程序中出現(xiàn)異常 異常處理異常處理程序運行程序運行處理完畢,繼續(xù)運行處理完畢,繼續(xù)運行2.2.異常的分類異常的分類ThrowableError

6、Exception編譯時異常編譯時異常SQLExceptionIOExceptionSystemExceptionNumberFormatExceptionNullPointerExceptionArithmeticExceptionRuntimeException2.1 2.1 異常的分類異常的分類u Error類通常用以描述類通常用以描述Java運行系統(tǒng)中的內(nèi)部錯誤以及資源耗盡的錯運行系統(tǒng)中的內(nèi)部錯誤以及資源耗盡的錯誤等,一般是指誤等,一般是指JVM錯誤錯誤uError類異常比較嚴重,僅靠修改程序本身不能恢復(fù)執(zhí)行,被稱為致命類異常比較嚴重,僅靠修改程序本身不能恢復(fù)執(zhí)行,被稱為致命性異常性異

7、常uException類被稱為非致命性異常,可以通過捕獲處理后正常運類被稱為非致命性異常,可以通過捕獲處理后正常運行行 ,可以分為兩種:,可以分為兩種:RuntimeException異常和異常和Runtime Exception之外的異常之外的異常u RuntimeException異常又被稱為運行時異常,即程序在運行階段異常又被稱為運行時異常,即程序在運行階段出現(xiàn)的異常;出現(xiàn)的異常;RuntimeException之外的異常又被稱為編譯時異常,之外的異常又被稱為編譯時異常,即程序在編譯階段出現(xiàn)的異常即程序在編譯階段出現(xiàn)的異常 2.2 2.2 程序中常見的異常類型程序中常見的異常類型異常類異

8、常類說明說明NullPointerException訪問訪問Null對象的方法對象的方法 IllegalArgumentException接收非法參數(shù)接收非法參數(shù) ClassNotFoundException不能加載所需要的類不能加載所需要的類 ArithmeticException算術(shù)運算異常,如除數(shù)為零算術(shù)運算異常,如除數(shù)為零 ArrayIndexOutOfBoundsException數(shù)組小于或大于數(shù)組的長度數(shù)組小于或大于數(shù)組的長度 InputMisMatchException接收的數(shù)據(jù)類型與實際輸入的類型不匹配接收的數(shù)據(jù)類型與實際輸入的類型不匹配 NumberFormatExcepti

9、on格式化數(shù)據(jù)異常格式化數(shù)據(jù)異常 IOException文件讀寫異常文件讀寫異常程序中常見的異常類型程序中常見的異常類型 public class Demo public static void main(String args) Student stu = null; System.out.println(stu.getName(); Class Student private String name; private int age; /屬性對應(yīng)的屬性對應(yīng)的getter/setter NullPointerException程序中常見的異常類型程序中常見的異常類型 public class

10、 Demo public static void main(String args) String stuName = tom ; int result = Integer.parsetInt(stuName); NumberFormatException程序中常見的異常類型程序中常見的異常類型 public class Demo public static void main(String args) int result = 50/0; AtrithmeticException3.3.異常處理異常處理n使用使用try-catch-finallyn使用使用throws和和throwu 在在J

11、ava程序進行異常處理主要有以下兩種方式程序進行異常處理主要有以下兩種方式3.1 3.1 try-catch-finally u在在Java的異常處理過程中,實際上也是按照面向?qū)ο蟮姆绞竭M行的。的異常處理過程中,實際上也是按照面向?qū)ο蟮姆绞竭M行的。處理的步驟如下:處理的步驟如下:public class Demo public static void main(String args) try int a = 50; int result = a/0; catch(ArithmeticException e) e.printStackTrace(); finally System.out.pr

12、intln(沒有找到匹配的異常沒有找到匹配的異常); 1. 發(fā)生異常,實例發(fā)生異常,實例化異常類對象化異常類對象2. 執(zhí)行異常處理執(zhí)行異常處理代碼代碼3. 異常統(tǒng)一出口異常統(tǒng)一出口try-catch-finally u不管有沒有找到匹配的異常類型不管有沒有找到匹配的異常類型finally語句塊的代碼都會執(zhí)行,在語句塊的代碼都會執(zhí)行,在try-catch-finally語句中,語句中,try是必須的是必須的,catch,finally語句塊是可以語句塊是可以省略的,但省略的,但catch、finally語句塊不能同時省略語句塊不能同時省略 public class Demo public sta

13、tic void main(String args) try int a = 50; int result = a/0; catch(ArithmeticException e) e.printStackTrace(); 省略省略finally語句塊語句塊try-catch-finally public class Demo public static void main(String args) try int a = 50; int result = a/0; finally System.out.println(異常的統(tǒng)一出口異常的統(tǒng)一出口); 省略省略catch語句塊語句塊在在try-

14、catch-finally中,可以同時省略中,可以同時省略catch和和finally 嗎嗎?try-catch-finally u 程序中的一段代碼可能會引發(fā)多種類型的異常,此時可以在一個程序中的一段代碼可能會引發(fā)多種類型的異常,此時可以在一個try語句塊語句塊 后面跟多個后面跟多個catch語句塊,分別處理不同的異常語句塊,分別處理不同的異常u 程序運行時,系統(tǒng)會從上至下分別對每個程序運行時,系統(tǒng)會從上至下分別對每個catch語句塊處理的異常進行檢測,語句塊處理的異常進行檢測, 并執(zhí)行第一個與異常類型匹配的并執(zhí)行第一個與異常類型匹配的catch語句。執(zhí)行其中的一條語句。執(zhí)行其中的一條cat

15、ch語句后,語句后, 后面的后面的catch語句都將被忽略語句都將被忽略 try int result = firstNum/secondNum; System.out.println(兩個數(shù)字相除的結(jié)果是兩個數(shù)字相除的結(jié)果是:+result) catch(ArithmeticException e) System.out.println(算術(shù)異常算術(shù)異常:); catch(NumberFormatException e) System.out.println(數(shù)字轉(zhuǎn)換異常數(shù)字轉(zhuǎn)換異常); catch(ArrayIndexOutOfBoundsException e) System.out.p

16、rintln(數(shù)組下標(biāo)越界異常數(shù)組下標(biāo)越界異常); catch(Exception e) System.out.println(其他異常其他異常); try-catch-finally u異常處理時捕獲范圍小的異常必須放在捕獲大的異常之前,否則程序異常處理時捕獲范圍小的異常必須放在捕獲大的異常之前,否則程序在編譯時會出現(xiàn)錯誤在編譯時會出現(xiàn)錯誤try firstNum = Integer.parseInt(args0); secondNum = Integer.parseInt(args1); catch(ArithmeticException e) System.out.println(算術(shù)異

17、常算術(shù)異常:); catch(Exception e) System.out.println(其他異常其他異常); catch(NumberFormatException e) System.out.println(數(shù)字轉(zhuǎn)換異常數(shù)字轉(zhuǎn)換異常); try-catch-finally try int result = firstNum/secondNum; System.out.println(兩個數(shù)字相除的結(jié)果是兩個數(shù)字相除的結(jié)果是:+result) catch(ArithmeticException e) System.out.println(算術(shù)異常算術(shù)異常:); catch(NumberF

18、ormatException e) System.out.println(數(shù)字轉(zhuǎn)換異常數(shù)字轉(zhuǎn)換異常); catch(ArrayIndexOutOfBoundsException e) System.out.println(數(shù)組下標(biāo)越界異常數(shù)組下標(biāo)越界異常); 如果程序中產(chǎn)生的異常類型和以上如果程序中產(chǎn)生的異常類型和以上catch塊中的異常類都不匹配,上面的程塊中的異常類都不匹配,上面的程序能捕獲并處理此異常嗎?序能捕獲并處理此異常嗎?try-catch-finally u在程序中對異常進行處理時,建議使用在程序中對異常進行處理時,建議使用Exception進行異常捕獲,這進行異常捕獲,這樣程序

19、中出現(xiàn)的全部異常均可能被處理。樣程序中出現(xiàn)的全部異常均可能被處理。 try int result = firstNum/secondNum; System.out.println(“商的結(jié)果是商的結(jié)果是:+result) catch(Exception e) e.printStackTrace(); 3.2 3.2 使用使用throws和和thrown異常捕獲除了可以使用異常捕獲除了可以使用try-catch-finally,還可以使用,還可以使用throw關(guān)鍵字拋出異常,關(guān)鍵字拋出異常,使用格式是:使用格式是:throw 異常類的實例異常類的實例public class ExceptionD

20、emo public static void main(String args) String ID = 4120102015105051111; if(ID.length()!=18) throw new IllegalArgumentException(非法的身份證編號非法的身份證編號); else System.out.println(身份證編號是身份證編號是:+ID); u 拋出異常拋出異常(throw) 使用使用throws和和throw n異常捕獲除了可以使用異常捕獲除了可以使用try-catch-finally和和throw關(guān)鍵字關(guān)鍵字,還可以通過還可以通過throws聲明某個方

21、法可能拋出的異常,使用聲明某個方法可能拋出的異常,使用throws聲明的方法表示此方法不處理異聲明的方法表示此方法不處理異常常,而是交給方法的調(diào)用處進行處理。使用格式是:而是交給方法的調(diào)用處進行處理。使用格式是:返回類型返回類型 方法名稱方法名稱(參數(shù)列表參數(shù)列表) throws 異常類異常類 class Computer public int div(int firstNum,int secondNum) throws Exception int result = firstNum/secondNum;return result;u 異常聲明異常聲明(throws) throw與與throw

22、s比較比較throwthrowthrowsthrows拋出一個具體的異常類實例拋出一個具體的異常類實例聲明一個方法可能拋出的所有異常類型聲明一個方法可能拋出的所有異常類型需要用戶自己捕獲相關(guān)的異常需要用戶自己捕獲相關(guān)的異常不用顯式捕獲異常不用顯式捕獲異常, ,可由系統(tǒng)自動將所有可由系統(tǒng)自動將所有捕獲的異常信息拋給上級方法捕獲的異常信息拋給上級方法throwthrow在方法內(nèi)部使用在方法內(nèi)部使用throwsthrows在方法名后面聲明在方法名后面聲明4.4.自定義異常自定義異常u在實際開發(fā)中,為了更加直觀地描述異常信息,方便開發(fā)人員根據(jù)異常信在實際開發(fā)中,為了更加直觀地描述異常信息,方便開發(fā)人員

23、根據(jù)異常信息快速定位異常發(fā)生的位置,可以使用自定義異常息快速定位異常發(fā)生的位置,可以使用自定義異常n如何自定義異常?如何自定義異常?4.1 為什么需要自定義異常為什么需要自定義異常為什么需要自定義異常為什么需要自定義異常n自定義的異常類是由開發(fā)人員根據(jù)需求開發(fā)的異常類自定義的異常類是由開發(fā)人員根據(jù)需求開發(fā)的異常類n程序中使用自定義的異常類程序中使用自定義的異常類,通過自定義異常類可以讓開發(fā)通過自定義異常類可以讓開發(fā) 人員更加方便的定位程序出錯的位置且更加詳細的描述異常信息。人員更加方便的定位程序出錯的位置且更加詳細的描述異常信息。u 自定義異常類的概念自定義異常類的概念4.2 4.2 如何創(chuàng)建

24、自定義異常如何創(chuàng)建自定義異常創(chuàng)建一個類繼承創(chuàng)建一個類繼承Exception 在當(dāng)前創(chuàng)建的類中定義有參的構(gòu)造方法,并在構(gòu)造方法中調(diào)用父類構(gòu)造方法在當(dāng)前創(chuàng)建的類中定義有參的構(gòu)造方法,并在構(gòu)造方法中調(diào)用父類構(gòu)造方法 在程序中使用自定義異常類在程序中使用自定義異常類 如何創(chuàng)建自定義異常如何創(chuàng)建自定義異常import java.util.*;public class MyException extends Exception public MyException(String msg) super(msg); class Demo public static void main(String args)

25、 throws Exception Scanner scanner = new Scanner(System.in);int age = scanner.nextInt();if(age100) throw new MyException(輸入的年齡非法輸入的年齡非法); 繼承繼承Exception 構(gòu)造方法中調(diào)構(gòu)造方法中調(diào)用父類構(gòu)造方法用父類構(gòu)造方法 使用自定義異常類使用自定義異常類5.5.異常使用細節(jié)異常使用細節(jié)一個方法被重寫時,重寫它的方法必須拋出相同的異常類或異常子類一個方法被重寫時,重寫它的方法必須拋出相同的異常類或異常子類import java.io.*;public class

26、Father public void speak() throws IOException System.out.println(Father); class Son extends Father public void speak() throws Exception System.out.println(son); Exception不是父類方法拋不是父類方法拋出的異常出的異常IOException的子的子類類,程序編譯異常程序編譯異常異常使用細節(jié)異常使用細節(jié)如果父類方法拋出多個異常類,則重寫方法必須拋出父類方法異常類的如果父類方法拋出多個異常類,則重寫方法必須拋出父類方法異常類的一個子集,即不能拋出新的異常一個子集,即不能拋出新的異常 import java.io.*;import java.sql.*;public class Father public void spe

溫馨提示

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

最新文檔

評論

0/150

提交評論