《java的異常處理》PPT課件.ppt_第1頁
《java的異常處理》PPT課件.ppt_第2頁
《java的異常處理》PPT課件.ppt_第3頁
《java的異常處理》PPT課件.ppt_第4頁
《java的異常處理》PPT課件.ppt_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、0,Java的異常處理,1,程序中的錯誤可分為三類:,編譯錯誤、邏輯錯誤和運行時錯誤。 編譯錯誤是由于沒有遵循Java語言的語法規(guī)則而產(chǎn)生的,這種錯誤要在編譯階段排除,否則程序不可能運行。 邏輯錯誤是指程序編譯正常,也能運行,但結(jié)果不是人們所期待的。,2,運行時錯誤是指程序運行過程中出現(xiàn)了一個不可能執(zhí)行的操作,就會出現(xiàn)運行時錯誤,運行時錯誤有時也可以由邏輯錯誤引起。 異常處理的主要目的是即使在程序運行時發(fā)生了錯誤,也要保證程序能正常結(jié)束,避免由于錯誤而使正在運行的程序中途停止。,3,什么是異常?,異常處理機制是JAVA語言的重要特征之一。通過異常處理機制可防止程序執(zhí)行期間因出現(xiàn)錯誤而造成不可預(yù)

2、料的結(jié)果。,一個好的應(yīng)用程序,除了具備用戶要求的功能外,還要求能預(yù)見程序執(zhí)行過程中可能產(chǎn)生的各種異常,并把處理異常的功能包括在用戶程序中。,4,異常是程序執(zhí)行期間發(fā)生的各種意外或錯誤。比如說: 用戶輸入出錯 所需文件找不到 運行時磁盤空間不夠 內(nèi)存不夠 算術(shù)運算錯 (數(shù)的溢出,被零除) 數(shù)組下標越界 ,5,在Java程序運行過程中,產(chǎn)生的異常通常有三種類型: 一是JAVA虛擬機由于某些內(nèi)部錯誤產(chǎn)生的異常,這類異常不在用戶程序的控制之內(nèi),也不需要用戶處理這類異常; 二是標準異常類,由java系統(tǒng)預(yù)先定義好的。這類異常是由程序代碼中的錯誤而產(chǎn)生的,如:以零為除數(shù)的除法,訪問數(shù)組下標范圍以外的數(shù)組元

3、素,訪問空對象內(nèi)的信息,這是需要用戶程序處理的異常。 三是根據(jù)需要在用戶程序中自定義的一些異常類。,6,Java中所有的異常都是用類表示的,在JAVA中預(yù)定義了很多異常類,每個代表了一種類型的運行錯誤。當程序發(fā)生異常時,會生成某個異常類的對象。 Java解釋器可以監(jiān)視程序中發(fā)生的異常,如果程序中產(chǎn)生的異常與系統(tǒng)中預(yù)定義某個異常類相對應(yīng),系統(tǒng)就自動產(chǎn)生一個該異常類的對象,就可以用相應(yīng)的機制處理異常,確保程序能夠安全正常地繼續(xù)運行。 異常對象中含有這種運行錯誤的信息和異常發(fā)生時程序的運行狀態(tài)。,7,二、Java中標準異常類的層次結(jié)構(gòu),針對各種類型的異常,Java定義了許多標準異常類,所有的Java

4、異常類都是系統(tǒng)類庫中的Exception類的子類,它們分布在java.lang、java.io、java.util和包中。每個異常類對應(yīng)一種特定的運行錯誤,各個異常類采用繼承的方式進行組織。異常類的層次結(jié)構(gòu)圖如下圖所示:,8,Java中異常類的結(jié)構(gòu):,9,Throwable類有兩個直接子類: Error(致命錯誤) 和Exception(異常)。 Error類型的異常與JAVA虛擬機本身發(fā)生的錯誤有關(guān),這類異常由java直接處理,用戶程序一般不能太做什么,只能等待系統(tǒng)通知用戶關(guān)閉程序。 用戶程序產(chǎn)生的錯誤由Exception的子類表示。用戶程序應(yīng)該處理這類異常。,10,、Throwable類,

5、該類屬于Java.lang包,是所有異常類的父類在Throwable類中定義了描述異常發(fā)生的位置和所有異常類共同需要的內(nèi)容,11,Throwable類的構(gòu)造函數(shù),(1) public Throwable(),以null作為錯誤信息串內(nèi)容創(chuàng)建Throwable對象,同時調(diào)用該對象的另一方法fillInStackTrace記錄異常發(fā)生的位置。,12,Throwable類的主要成員函數(shù),13,Throwable類的主要成員函數(shù)(續(xù)),14,Error類是Throwable類的子類,由系統(tǒng)保留,用戶不能使用。也就是說, Error類型的錯誤不允許用戶插手處理,由Java系統(tǒng)自行處理。 Error類描述

6、系統(tǒng)錯誤:如將字節(jié)碼裝入內(nèi)存的過程中和對字節(jié)碼進行檢查的過程中遇到的問題、java的內(nèi)部錯誤、資源耗盡的情況。 這類異常由java直接處理,用戶程序不要理會這類異常。,、Error類,15,Exception類是Throwable類的子類,用戶程序中可以直接使用Exception類處理Exception類型的異常。Exception類不僅繼承了Throwable類的方法,同時定義以下兩個構(gòu)造函數(shù): public Exception() public Exception(String s) 說明: 字符串s用來接收傳入的字符串信息,該信息通常是 對錯誤的描述。,3、Exception類,16,異

7、常程序舉例:,/java直接處理運行時異常 class TestSystemException public static void main(String args) intnum =new int2; for(int i=1;i3;i+) numi=i; System.out.println(“num”+i+”=”+i); 該程序產(chǎn)生的輸出見程序的運行,17,Java對異常的處理涉及兩方面的內(nèi)容: 一是拋出(throw)異常 二是捕捉(catch)異常 如果程序在運行過程中出現(xiàn)了運行錯誤,并且產(chǎn)生的異常與系統(tǒng)中預(yù)定義某個異常類相對應(yīng),系統(tǒng)就自動產(chǎn)生一個該異常類的對象,這個過程稱為拋出(th

8、row)異常。當有異常對象拋出時,將在程序中尋找處理這個異常的代碼,如果找到處理代碼,則把異常對象交給該段代碼進行處理,這個過程稱為捕捉(catch)異常。如果程序中沒有給出處理異常的代碼,則把異常交給Java運行系統(tǒng)默認的異常處理代碼進行處理。默認的處理方式是:首先顯示描述異常信息的字符串,然后終止程序的運行。,三、異常的處理機制,18,四、異常的拋出(throw),拋出異常有兩種方式:由系統(tǒng)自動拋出和利用拋出語句拋出。 1 由系統(tǒng)自動拋出異常 在程序運行過程中,如果出現(xiàn)了可被Java運行系統(tǒng)識別的錯誤,系統(tǒng)會自動產(chǎn)生與該錯誤相對應(yīng)的異常類的對象,即自動拋出。例如上例。 2 人為異常拋出 兩

9、種方式: 在方法頭寫出需要拋出的異常(利用throws語句) 在方法體內(nèi)拋出異常(利用throw語句),19,Throws語句拋出異常格式:,修飾符 返回值類型 方法名(形參表)throws 異常類名1,異常類名2, 說明: 在執(zhí)行該方法的過程中,如果出現(xiàn)了由throws列出的異常,則可以拋出異常,并在程序中尋找處理這個異常的代碼;如果程序中沒有給出處理異常的代碼,則把異常交給Java運行系統(tǒng)默認的異常處理代碼進行處理。,20,Throws語句舉例,class Throws_Exp public static void main(String args) throws ArithmeticEx

10、ception,ArrayIndexOutOfBoundsException int a=4,b=0,c=1,2,3,4,5; System.out.println(a/b); System.out.println(ca+1); System.out.println(“end”); ,21,Throw語句拋出異常,如果需要在方法內(nèi)某個位置拋出異常,可以使用Throw語句,通常將Throw語句和if語句配合使用。 格式: throw 異常類對象名 throw (new 異常類名(); 說明: 執(zhí)行throw語句時,程序終止執(zhí)行后面的語句,在程序中尋找處理異常的代碼;如果程序中沒有給出處理代碼,則

11、把異常交給Java運行系統(tǒng)處理。,22,Throw語句舉例1,class Throw_Exp1 public static void main(String args) ArithmeticException e=new ArithmeticException(); int a=4,b=0; System.out.println(“Before ArithmeticException”); if(b=0) throw e; System.out.println(a/b); ,23,Throw語句舉例2,class Throw_Exp2 public static void main(Strin

12、g args) int a=5,c=1,2,3,4,5; System.out.println(“Before throw ArrayIndexOutOfBoundsException”); if(a4) throw (new ArrayIndexOutOfBoundsException(); System.out.println(“After throw ArrayIndexOutOfBoundsException”); ,24,Throw語句舉例3,class Throw_Exp3 public static void main(String args) int a=5,b=0,c=1,2

13、,3,4,5; System.out.println(“Before throw”); if(b=0) throw (new ArithmeticException (); System.out.println(a/b); if(a4) throw (new ArrayIndexOutOfBoundsException(); System.out.println(a/b); ,25,五、捕捉異常,在前面給出的例子中,由于程序中都沒有給出處理異常的代碼,因此拋出的異常都被Java運行系統(tǒng)捕捉,由Java運行系統(tǒng)進行相應(yīng)處理。一般來說,在設(shè)計程序過程中,如果能夠預(yù)測程序中可能發(fā)生 的異常,則應(yīng)在程

14、序中給出處理代碼。而不交給Java運行系統(tǒng)處理,對于程序中那些不能預(yù)測的異常,可交給Java運行 系統(tǒng)處理。 要由程序自己捕捉和處理異常,需要建立try - catch-finally語句塊。,26,try - catch語句塊格式:,27,(1)將可能發(fā)生異常的程序代碼放置在try程序塊中。如果該塊內(nèi)的代碼出現(xiàn)了異常,系統(tǒng)將終止try塊代碼的執(zhí)行,自動跳轉(zhuǎn)到所發(fā)生的異常類對應(yīng)的catch塊中,執(zhí)行該塊中的代碼。如果程序運行正常,后面的各catch塊不起任何作用。 (2)finally塊是個可選項,無論異常是否發(fā)生,finally塊的代碼必定執(zhí)行。通常把對各種異常共同處理部分放在finally

15、塊中,如輸出統(tǒng)一信息、釋放資源、清理內(nèi)存、關(guān)閉已打開的文件等。 (3)一個try塊可以對應(yīng)多個catch塊,用于對多個異常類進行捕獲。但最多只能選中一個執(zhí)行。 (4)異常對象與catch塊中聲明的實例的匹配原則: 異常對象是catch塊中聲明的異常類的實例; 異常對象是catch塊中聲明的異常類的某一子類的實例;,Try-catch-finally結(jié)構(gòu)說明:,28,try - catch-finally語句舉例1,class Try_Catch_Exp1 public static void main(String args) int d=0,a; try System.out.println

16、(Before throw Exception); a=5/d; System.out.println(the Exception is throw,The statement ist run); catch(ArithmeticException e) System.out.println(處理算數(shù)異常的catch語句塊捕獲了異常!); System.out.println(捕獲的異常為+e); catch(ArrayIndexOutOfBoundsException e) System.out.println(處理數(shù)組下標越異常的catch語句塊捕獲了異常!); System.out.pr

17、intln(捕獲的異常為+e); finally System.out.println(這是所有catch塊的共有部分!); System.out.println(try-catch-finally塊后面的語句); ,29,try - catch-finally語句舉例2,class Try_Catch_Exp2 public static void main(String args) int a=5,b=0,c=1,2,3,4,5; try System.out.println(Before throw); if(a4) throw (new ArrayIndexOutOfBoundsExc

18、eption(); System.out.println (After throw); catch(ArrayIndexOutOfBoundsException e) System.out.println(處理數(shù)組下標越異常的catch語句塊捕獲了異常!); System.out.println(捕獲的異常為+e); finally System.out.println(這是所有catch塊的共有部分!); System.out.println(try-catch-finally塊后面的語句); ,30,程序設(shè)計舉例:,求三角形的面積或周長。 注意:三角形的三條邊通過鍵盤輸入,輸入的數(shù)值構(gòu)不成

19、三角形的話,需要重新輸入。,31,六、用戶自定義的異常類,盡管Java提供了很多異常類,但用戶還是可以根據(jù)需要定義自己的異常類,即創(chuàng)建自定義異常類。 說明:,(1)用戶自定義的異常類必須是Throwable類或Exception類的子類。,(2)自定義的異常類,一般只要聲明兩個構(gòu)造方法,一個是不用參數(shù)的,另一個以字符串為參數(shù)。作為構(gòu)造方法參數(shù)的字符串應(yīng)當反映異常的信息。,32,其一般形式為: class 自定義異常類名 extends Exception 異常類體; ,用戶自定義的異常類格式:,33,用戶自定義的異常類說明:,自定義異常類 class MyException extends E

20、xception ,用戶定義的異常同樣要用try-catch捕獲,但必須由用戶自己拋出 throw new MyException().,34,用戶自定義的異常類舉例:,class Exception_exp public static void main(String args) try System.out.println(2+3=+add(2,3); System.out.println(-8+10=+add(-8,10); catch (Exception e) System.out.println(Exception is +e); static int add(int n,int

21、m) throws UserException if (n0| m0) throw new UserException(); return n+m; class UserException extends Exception UserException()super(數(shù)據(jù)為負數(shù));,35,七、常見的系統(tǒng)預(yù)定義編譯異常,在包java.lang中聲明的標準查檢型(編譯時發(fā)現(xiàn))異常: (1) ClassNotFoundException 指定名字的類或接口未找到。 (2) IllegalAccessException 在調(diào)用某方法時,找不到該方法的聲明。例如,某方法在另一個包的類中聲明,而該方法未聲明為public。 (3) InstantiationExcept

溫馨提示

  • 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

提交評論