java教程第9章 異常ppt課件_第1頁
java教程第9章 異常ppt課件_第2頁
java教程第9章 異常ppt課件_第3頁
java教程第9章 異常ppt課件_第4頁
java教程第9章 異常ppt課件_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第9章章 異常異常了解異常的概念,及Java中常用異常類;能熟練使用各種異常處理的結(jié)構(gòu)自定義異常9.1 異常的概念異常的概念在程序設(shè)計過程中有兩種錯誤:編譯錯誤編譯能檢查出來)運行時錯誤異常)異常通常指的是:程序運行中,導(dǎo)致整個程序無法繼續(xù)運行的錯誤;Java中提出異常這個概念的原因是:以面向?qū)ο蟮姆绞教幚沓绦蛑锌深A(yù)見的錯誤,將正確的代碼段和錯誤的代碼段分離;也為編寫一個穩(wěn)健的程序提供了保障;Java中異常處理機制就是:拋抓模式9.2 Java中異常類的層次結(jié)構(gòu)中異常類的層次結(jié)構(gòu)Error類體系描述了Java運行系統(tǒng)中的內(nèi)部錯誤及資源耗盡等情況,這種錯誤一般都是災(zāi)難性的錯誤,一般不在程序中捕

2、獲處理;從RuntimeException派生出來的異?;旧隙际欠菣z查性異常,這類異常大部分是程序員可以避免的,因此這種異常Java不強制要求在程序中捕獲處理;從非RuntimeException派生出來的異?;旧隙际菣z查性異常,這類異常很可能是由可預(yù)知的外界原因造成的,要求必須在程序中捕獲處理。9.3 Java中常用的異常類中常用的異常類異異 常常說說 明明Exception異常層次結(jié)構(gòu)的根類異常層次結(jié)構(gòu)的根類RuntimeException許多許多java.lang異常的基類異常的基類ArithmeticException算術(shù)異常,如:除數(shù)為算術(shù)異常,如:除數(shù)為0IllegalArgu

3、mentException方法接收到非法參數(shù)方法接收到非法參數(shù)ArrayIndexOutOfBoundsException數(shù)組下標越界數(shù)組下標越界NullPointerException訪問空引用訪問空引用ClassNotFoundException不能加載所需的類不能加載所需的類NumberFormatException字符串轉(zhuǎn)換數(shù)字失敗字符串轉(zhuǎn)換數(shù)字失敗IOExceptionI/O異常的根類異常的根類FileNotFoundException找不到文件找不到文件EOFException文件結(jié)束文件結(jié)束9.4 異常的捕捉與處理異常的捕捉與處理Java程序在執(zhí)行過程中如出現(xiàn)異常,會自動生成一個

4、異常類對象,該異常類對象被提交給Java運行時系統(tǒng),這個過程稱為拋出throw異常;當Java運行時系統(tǒng)接收到異常對象時,會尋找能處理這一異常的代碼,并把當前異常對象交給其處理,這一過程稱為捕獲catch異常;如果Java運行時系統(tǒng)找不到可以捕獲異常的方法,則運行時系統(tǒng)將終止,相應(yīng)的Java程序也將退出;Java中用try、catch語句進行異常處理。父類異常可以捕獲其子類異常9.4.1 try/catch塊的一般形式塊的一般形式try /監(jiān)視有可能發(fā)生異常的代碼段監(jiān)視有可能發(fā)生異常的代碼段catch (異常類型異常類型) /捕獲發(fā)生的異常捕獲發(fā)生的異常 /對異常進行處理對異常進行處理clas

5、s Excep public int division(int a, int b) try return a/b; catch(ArithmeticException e) System.out.println(cant division zero);return 0;class CatchTest public static void main(String args) Excep ex = new Excep();int i = ex.division(4, 0);try/catch示例示例9.4.2 多多catch結(jié)構(gòu)結(jié)構(gòu)子異常寫在前,父異常寫在后;多重catch塊只會捕捉到最先產(chǎn)生的異

6、常,而不是把所有的異常全部捕捉完;class MultCatchTest public static void main(String args) try int i0 = Integer.parseInt(args0);int i1 = Integer.parseInt(args1);int i = i0/i1; catch (ArithmeticException e) System.out.println(cant division zero);e.printStackTrace(); catch (ArrayIndexOutOfBoundsException e) System.out

7、.println(ArrayOut);e.printStackTrace();9.4.3 嵌套結(jié)構(gòu)嵌套結(jié)構(gòu)class MultCatchTest public static void main(String args) try int i0 = 1;int i1 = 1;try i0 = Integer.parseInt(args0); i1 = Integer.parseInt(args1); catch (ArrayIndexOutOfBoundsException e) System.out.println(ArrayOut);e.printStackTrace();int i = i0

8、/i1; catch (ArithmeticException e) System.out.println(cant division zero);e.printStackTrace();9.4.4 finally子句子句finally子句的使用就是要try中的代碼是否拋出異常,程序都執(zhí)行它;try代碼不拋出異常,try執(zhí)行完后執(zhí)行它;try代碼拋出的異常在catch子句中被捕獲,catch執(zhí)行完后執(zhí)行它;try代碼拋出異常,但未在任何catch子句中捕獲,執(zhí)行完finally后再向系統(tǒng)拋出異常;當try或catch中有return語句時,會執(zhí)行完finally子句再返回,這時它就顯得更為有用

9、;Finally子句中一般是關(guān)閉某個文件、數(shù)據(jù)庫連接等等。try/catch/finally應(yīng)用模型應(yīng)用模型try /連接到數(shù)據(jù)庫的代碼,有可能發(fā)生異常連接到數(shù)據(jù)庫的代碼,有可能發(fā)生異常 /對數(shù)據(jù)庫進行操作的代碼,有可能發(fā)生異常對數(shù)據(jù)庫進行操作的代碼,有可能發(fā)生異常catch (SQLException sqle) /捕獲數(shù)據(jù)庫異常捕獲數(shù)據(jù)庫異常 /對捕獲的異常進行處理對捕獲的異常進行處理finally /在在finally塊中執(zhí)行關(guān)閉數(shù)據(jù)庫的操作塊中執(zhí)行關(guān)閉數(shù)據(jù)庫的操作class MultCatchTest public static void main(String args) try i

10、nt i0 = Integer.parseInt(args0);int i1 = Integer.parseInt(args1);int i = i0/i1; catch (ArithmeticException e) System.out.println(cant division zero);e.printStackTrace(); catch (ArrayIndexOutOfBoundsException e) System.out.println(ArrayOut);e.printStackTrace();finally System.out.println(finally);try/

11、catchfinally示例9.5 throws和和throwjava中的異??梢砸粚訉酉蛏蟼鬟f,直至虛擬機;Throws就是用于聲明方法拋出的異常。此時這個異常就不用在方法中用try/catch語句處理了,而是向上一層傳達,讓其調(diào)用者去處理。一句話:方法中的異常要么用try/catch語句捕獲處理,要么用throws向外聲明;main方法也可以聲明拋出異常,此時就拋給虛擬機了;語法:修飾符 返回類型 方法名形參列表throws 異常列表多個異常用逗號隔開;留意: 1、throws聲明的異常只能是方法中拋出的異常,或其父類;2、方法用throws聲明的檢查性異常,其調(diào)用必須處理或向上聲明,否則

12、不會通過編譯;3、方法覆蓋中對于異常聲明的限制;9.5.1 throws關(guān)鍵字關(guān)鍵字class Excep public int division(int a, int b) throws ArithmeticException return a/b;class CatchTest public static void main(String args) Excep ex = new Excep();try int i = ex.division(4, 0); catch(ArithmeticException e) e.printStackTrace();throws示例9.5.2 thro

13、w關(guān)鍵字關(guān)鍵字throw語句用于手工拋出異常;執(zhí)行流程將在throw語句后立即停止,轉(zhuǎn)而尋找與之類型相匹配的catch塊;throw語句的語法是:throw 異常類對象;class Excep public int division(int a, int b) try if(b=0) throw new ArithmeticException(); else return a/b; catch(ArithmeticException e) System.out.println(cant division zero);e.printStackTrace();return 0;throw 例如9.6 自定義異常自定義異常在Java 各個體系結(jié)構(gòu)中所提供的異常類基本上能夠滿足用戶的開發(fā)需求,但有的時候一些特殊的需求所需要的異常類如果Java體系結(jié)構(gòu)中沒有提供,開發(fā)者或者是第三方可以自行定義異常類。定義異常類的基本步驟: 1、繼承Exception類 2、調(diào)用父類的構(gòu)造方法,傳遞異常信息 3、使用自定義異常類。所有的自定義異常類都是非運行時異常。自

溫馨提示

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

最新文檔

評論

0/150

提交評論