




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章第十章 理論理論 異常處理異常處理課程回顧課程回顧u多態(tài)是指一個(gè)對(duì)外接口,多種實(shí)現(xiàn)方式,即一個(gè)接口使用不同實(shí)例執(zhí)行多態(tài)是指一個(gè)對(duì)外接口,多種實(shí)現(xiàn)方式,即一個(gè)接口使用不同實(shí)例執(zhí)行不同的操作不同的操作 ,它分為兩種,它分為兩種方法重載和方法重寫(xiě)方法重載和方法重寫(xiě)u方法重載是指在一個(gè)類的內(nèi)部提供同名方法,但方法的參數(shù)列表不同;方法重載是指在一個(gè)類的內(nèi)部提供同名方法,但方法的參數(shù)列表不同;方法返回類型不是區(qū)分方法重載的標(biāo)志方法返回類型不是區(qū)分方法重載的標(biāo)志u方法重寫(xiě)發(fā)生在子父類繼承關(guān)系中,子類提供與父類同名方法,其方法方法重寫(xiě)發(fā)生在子父類繼承關(guān)系中,子類提供與父類同名方法,其方法參數(shù)列表及返回類
2、型相同,子類重寫(xiě)父類中的方法范圍不能比父類小參數(shù)列表及返回類型相同,子類重寫(xiě)父類中的方法范圍不能比父類小u抽象類與抽象類與“模版模版”類似,抽象類用于繼承,抽象類不一定有抽象方法;類似,抽象類用于繼承,抽象類不一定有抽象方法;有抽象方法的類一定是抽象類有抽象方法的類一定是抽象類u接口是一種特殊的類,是一系列方法或特征的聲明;接口可以定義常量接口是一種特殊的類,是一系列方法或特征的聲明;接口可以定義常量和抽象方法;接口允許多繼承和抽象方法;接口允許多繼承本章內(nèi)容本章內(nèi)容u異常的概念異常的概念u異常類的分類異常類的分類u程序中的異常處理程序中的異常處理u自定義的異常類自定義的異常類本章目標(biāo)本章目標(biāo)
3、u理解異常的概念理解異常的概念u掌握掌握J(rèn)avaJava中異常類的繼承結(jié)構(gòu)中異常類的繼承結(jié)構(gòu)u掌握在掌握在JavaJava中如何對(duì)程序進(jìn)行異常處理中如何對(duì)程序進(jìn)行異常處理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ù)為零時(shí)產(chǎn)生異常除數(shù)為零時(shí)產(chǎn)生異常,中止程序運(yùn)行中止程序運(yùn)行 保證程序不因出現(xiàn)異常而中止運(yùn)行,必須要對(duì)出現(xiàn)的異常進(jìn)行處理保證程序不因出現(xiàn)異常而中止運(yùn)行,必須要對(duì)出現(xiàn)的異常進(jìn)行處理1.1 為什么需要異常處理為什么需要異常處理1.2 1.2 什么是異常什么是異常u現(xiàn)實(shí)生活中的異常現(xiàn)實(shí)生活中的異常n每日開(kāi)車(chē)去上班每日開(kāi)車(chē)去上班, ,大約大約1515分鐘分鐘n異常情況時(shí)常發(fā)
5、生異常情況時(shí)常發(fā)生堵車(chē)!堵車(chē)!天氣狀況天氣狀況 不好!不好!正常情況正常情況 異常情況異常情況 程序異常程序異常u在在Java編程中,異常就是程序在運(yùn)行過(guò)程中發(fā)生的錯(cuò)誤。編程中,異常就是程序在運(yùn)行過(guò)程中發(fā)生的錯(cuò)誤。u異常若處理不當(dāng),它會(huì)終止程序的運(yùn)行異常若處理不當(dāng),它會(huì)終止程序的運(yùn)行如何處理異常?如何處理異常?等待、改道等待、改道慢行慢行堵車(chē)堵車(chē)天氣狀況差天氣狀況差處理異常處理異常 程序中預(yù)先設(shè)置程序中預(yù)先設(shè)置 異常的處理辦法異常的處理辦法 程序中出現(xiàn)異常程序中出現(xiàn)異常 異常處理異常處理程序運(yùn)行程序運(yùn)行處理完畢,繼續(xù)運(yùn)行處理完畢,繼續(xù)運(yùn)行2.2.異常的分類異常的分類ThrowableError
6、Exception編譯時(shí)異常編譯時(shí)異常SQLExceptionIOExceptionSystemExceptionNumberFormatExceptionNullPointerExceptionArithmeticExceptionRuntimeException2.1 2.1 異常的分類異常的分類u Error類通常用以描述類通常用以描述Java運(yùn)行系統(tǒng)中的內(nèi)部錯(cuò)誤以及資源耗盡的錯(cuò)運(yùn)行系統(tǒng)中的內(nèi)部錯(cuò)誤以及資源耗盡的錯(cuò)誤等,一般是指誤等,一般是指JVM錯(cuò)誤錯(cuò)誤uError類異常比較嚴(yán)重,僅靠修改程序本身不能恢復(fù)執(zhí)行,被稱為致命類異常比較嚴(yán)重,僅靠修改程序本身不能恢復(fù)執(zhí)行,被稱為致命性異常性異
7、常uException類被稱為非致命性異常,可以通過(guò)捕獲處理后正常運(yùn)類被稱為非致命性異常,可以通過(guò)捕獲處理后正常運(yùn)行行 ,可以分為兩種:,可以分為兩種:RuntimeException異常和異常和Runtime Exception之外的異常之外的異常u RuntimeException異常又被稱為運(yùn)行時(shí)異常,即程序在運(yùn)行階段異常又被稱為運(yùn)行時(shí)異常,即程序在運(yùn)行階段出現(xiàn)的異常;出現(xiàn)的異常;RuntimeException之外的異常又被稱為編譯時(shí)異常,之外的異常又被稱為編譯時(shí)異常,即程序在編譯階段出現(xiàn)的異常即程序在編譯階段出現(xiàn)的異常 2.2 2.2 程序中常見(jiàn)的異常類型程序中常見(jiàn)的異常類型異常類異
8、常類說(shuō)明說(shuō)明NullPointerException訪問(wèn)訪問(wèn)Null對(duì)象的方法對(duì)象的方法 IllegalArgumentException接收非法參數(shù)接收非法參數(shù) ClassNotFoundException不能加載所需要的類不能加載所需要的類 ArithmeticException算術(shù)運(yùn)算異常,如除數(shù)為零算術(shù)運(yùn)算異常,如除數(shù)為零 ArrayIndexOutOfBoundsException數(shù)組小于或大于數(shù)組的長(zhǎng)度數(shù)組小于或大于數(shù)組的長(zhǎng)度 InputMisMatchException接收的數(shù)據(jù)類型與實(shí)際輸入的類型不匹配接收的數(shù)據(jù)類型與實(shí)際輸入的類型不匹配 NumberFormatExcepti
9、on格式化數(shù)據(jù)異常格式化數(shù)據(jù)異常 IOException文件讀寫(xiě)異常文件讀寫(xiě)異常程序中常見(jiàn)的異常類型程序中常見(jiàn)的異常類型 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; /屬性對(duì)應(yīng)的屬性對(duì)應(yīng)的getter/setter NullPointerException程序中常見(jiàn)的異常類型程序中常見(jiàn)的異常類型 public class
10、 Demo public static void main(String args) String stuName = tom ; int result = Integer.parsetInt(stuName); NumberFormatException程序中常見(jiàn)的異常類型程序中常見(jiàn)的異常類型 public class Demo public static void main(String args) int result = 50/0; AtrithmeticException3.3.異常處理異常處理n使用使用try-catch-finallyn使用使用throws和和throwu 在在J
11、ava程序進(jìn)行異常處理主要有以下兩種方式程序進(jìn)行異常處理主要有以下兩種方式3.1 3.1 try-catch-finally u在在Java的異常處理過(guò)程中,實(shí)際上也是按照面向?qū)ο蟮姆绞竭M(jìn)行的。的異常處理過(guò)程中,實(shí)際上也是按照面向?qū)ο蟮姆绞竭M(jìn)行的。處理的步驟如下:處理的步驟如下: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(沒(méi)有找到匹配的異常沒(méi)有找到匹配的異常); 1. 發(fā)生異常,實(shí)例發(fā)生異常,實(shí)例化異常類對(duì)象化異常類對(duì)象2. 執(zhí)行異常處理執(zhí)行異常處理代碼代碼3. 異常統(tǒng)一出口異常統(tǒng)一出口try-catch-finally u不管有沒(méi)有找到匹配的異常類型不管有沒(méi)有找到匹配的異常類型finally語(yǔ)句塊的代碼都會(huì)執(zhí)行,在語(yǔ)句塊的代碼都會(huì)執(zhí)行,在try-catch-finally語(yǔ)句中,語(yǔ)句中,try是必須的是必須的,catch,finally語(yǔ)句塊是可以語(yǔ)句塊是可以省略的,但省略的,但catch、finally語(yǔ)句塊不能同時(shí)省略語(yǔ)句塊不能同時(shí)省略 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語(yǔ)句塊語(yǔ)句塊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語(yǔ)句塊語(yǔ)句塊在在try-
14、catch-finally中,可以同時(shí)省略中,可以同時(shí)省略catch和和finally 嗎嗎?try-catch-finally u 程序中的一段代碼可能會(huì)引發(fā)多種類型的異常,此時(shí)可以在一個(gè)程序中的一段代碼可能會(huì)引發(fā)多種類型的異常,此時(shí)可以在一個(gè)try語(yǔ)句塊語(yǔ)句塊 后面跟多個(gè)后面跟多個(gè)catch語(yǔ)句塊,分別處理不同的異常語(yǔ)句塊,分別處理不同的異常u 程序運(yùn)行時(shí),系統(tǒng)會(huì)從上至下分別對(duì)每個(gè)程序運(yùn)行時(shí),系統(tǒng)會(huì)從上至下分別對(duì)每個(gè)catch語(yǔ)句塊處理的異常進(jìn)行檢測(cè),語(yǔ)句塊處理的異常進(jìn)行檢測(cè), 并執(zhí)行第一個(gè)與異常類型匹配的并執(zhí)行第一個(gè)與異常類型匹配的catch語(yǔ)句。執(zhí)行其中的一條語(yǔ)句。執(zhí)行其中的一條cat
15、ch語(yǔ)句后,語(yǔ)句后, 后面的后面的catch語(yǔ)句都將被忽略語(yǔ)句都將被忽略 try int result = firstNum/secondNum; System.out.println(兩個(gè)數(shù)字相除的結(jié)果是兩個(gè)數(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異常處理時(shí)捕獲范圍小的異常必須放在捕獲大的異常之前,否則程序異常處理時(shí)捕獲范圍小的異常必須放在捕獲大的異常之前,否則程序在編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤在編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤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(兩個(gè)數(shù)字相除的結(jié)果是兩個(gè)數(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在程序中對(duì)異常進(jìn)行處理時(shí),建議使用在程序中對(duì)異常進(jìn)行處理時(shí),建議使用Exception進(jìn)行異常捕獲,這進(jìn)行異常捕獲,這樣程序
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 異常類的實(shí)例異常類的實(shí)例public class ExceptionD
20、emo public static void main(String args) String ID = 4120102015105051111; if(ID.length()!=18) throw new IllegalArgumentException(非法的身份證編號(hào)非法的身份證編號(hào)); else System.out.println(身份證編號(hào)是身份證編號(hào)是:+ID); u 拋出異常拋出異常(throw) 使用使用throws和和throw n異常捕獲除了可以使用異常捕獲除了可以使用try-catch-finally和和throw關(guān)鍵字關(guān)鍵字,還可以通過(guò)還可以通過(guò)throws聲明某個(gè)方
21、法可能拋出的異常,使用聲明某個(gè)方法可能拋出的異常,使用throws聲明的方法表示此方法不處理異聲明的方法表示此方法不處理異常常,而是交給方法的調(diào)用處進(jìn)行處理。使用格式是:而是交給方法的調(diào)用處進(jìn)行處理。使用格式是:返回類型返回類型 方法名稱方法名稱(參數(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拋出一個(gè)具體的異常類實(shí)例拋出一個(gè)具體的異常類實(shí)例聲明一個(gè)方法可能拋出的所有異常類型聲明一個(gè)方法可能拋出的所有異常類型需要用戶自己捕獲相關(guān)的異常需要用戶自己捕獲相關(guān)的異常不用顯式捕獲異常不用顯式捕獲異常, ,可由系統(tǒng)自動(dòng)將所有可由系統(tǒng)自動(dòng)將所有捕獲的異常信息拋給上級(jí)方法捕獲的異常信息拋給上級(jí)方法throwthrow在方法內(nèi)部使用在方法內(nèi)部使用throwsthrows在方法名后面聲明在方法名后面聲明4.4.自定義異常自定義異常u在實(shí)際開(kāi)發(fā)中,為了更加直觀地描述異常信息,方便開(kāi)發(fā)人員根據(jù)異常信在實(shí)際開(kāi)發(fā)中,為了更加直觀地描述異常信息,方便開(kāi)發(fā)人員
23、根據(jù)異常信息快速定位異常發(fā)生的位置,可以使用自定義異常息快速定位異常發(fā)生的位置,可以使用自定義異常n如何自定義異常?如何自定義異常?4.1 為什么需要自定義異常為什么需要自定義異常為什么需要自定義異常為什么需要自定義異常n自定義的異常類是由開(kāi)發(fā)人員根據(jù)需求開(kāi)發(fā)的異常類自定義的異常類是由開(kāi)發(fā)人員根據(jù)需求開(kāi)發(fā)的異常類n程序中使用自定義的異常類程序中使用自定義的異常類,通過(guò)自定義異常類可以讓開(kāi)發(fā)通過(guò)自定義異常類可以讓開(kāi)發(fā) 人員更加方便的定位程序出錯(cuò)的位置且更加詳細(xì)的描述異常信息。人員更加方便的定位程序出錯(cuò)的位置且更加詳細(xì)的描述異常信息。u 自定義異常類的概念自定義異常類的概念4.2 4.2 如何創(chuàng)建
24、自定義異常如何創(chuàng)建自定義異常創(chuàng)建一個(gè)類繼承創(chuàng)建一個(gè)類繼承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.異常使用細(xì)節(jié)異常使用細(xì)節(jié)一個(gè)方法被重寫(xiě)時(shí),重寫(xiě)它的方法必須拋出相同的異常類或異常子類一個(gè)方法被重寫(xiě)時(shí),重寫(xiě)它的方法必須拋出相同的異常類或異常子類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的子的子類類,程序編譯異常程序編譯異常異常使用細(xì)節(jié)異常使用細(xì)節(jié)如果父類方法拋出多個(gè)異常類,則重寫(xiě)方法必須拋出父類方法異常類的如果父類方法拋出多個(gè)異常類,則重寫(xiě)方法必須拋出父類方法異常類的一個(gè)子集,即不能拋出新的異常一個(gè)子集,即不能拋出新的異常 import java.io.*;import java.sql.*;public class Father public void spe
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)年會(huì)場(chǎng)地租賃合同模板(版)
- 個(gè)人股權(quán)抵押借款合同協(xié)議
- 城市軌道交通維護(hù)勞務(wù)分包合同
- 江蘇省蘇州市虎丘教育集團(tuán)2025年數(shù)學(xué)五年級(jí)第二學(xué)期期末質(zhì)量檢測(cè)模擬試題含答案
- 上海浦東新區(qū)2024-2025學(xué)年數(shù)學(xué)四下期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 肉類采購(gòu)合同范本
- 江蘇省寶應(yīng)縣山陽(yáng)中學(xué)2025年初三3月第一次考試生物試題含解析
- 肇慶醫(yī)學(xué)高等專科學(xué)校《貿(mào)易數(shù)據(jù)庫(kù)與分析工具》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東文化產(chǎn)業(yè)職業(yè)學(xué)院《會(huì)計(jì)職業(yè)道德》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘇州托普信息職業(yè)技術(shù)學(xué)院《中國(guó)現(xiàn)當(dāng)代文學(xué)與小學(xué)語(yǔ)文》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北省2025屆高三(4月)調(diào)研模擬考試物理試題及答案
- 安徽省宿州市泗縣2024-2025學(xué)年部編版八年級(jí)下學(xué)期期中歷史試卷(含答案)
- 慢性病管理與公共衛(wèi)生試題及答案
- 基礎(chǔ)攝影考試題目及答案
- 2025江蘇無(wú)錫江陰公用事業(yè)集團(tuán)限公司招聘1人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年4月23日世界讀書(shū)日主題班會(huì)
- 2025中煤鄂爾多斯能源化工有限公司高校畢業(yè)生招聘98人筆試參考題庫(kù)附帶答案詳解
- 心力衰竭的護(hù)理業(yè)務(wù)查房
- 2025年抖音達(dá)人探店合同模板
- 20025如皋統(tǒng)計(jì)局事業(yè)單位考試真題及答案
- 五一安全教育主題班會(huì)
評(píng)論
0/150
提交評(píng)論