java的異常處理_第1頁
java的異常處理_第2頁
java的異常處理_第3頁
java的異常處理_第4頁
java的異常處理_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、JavaJava的異常處理的異常處理0程序中的錯誤可分為三類:n編譯錯誤、邏輯錯誤和運行時錯誤。編譯錯誤、邏輯錯誤和運行時錯誤。 編譯錯誤編譯錯誤是由于沒有遵循是由于沒有遵循Java語言的語語言的語法規(guī)則而產(chǎn)生的,這種錯誤要在編譯階段排法規(guī)則而產(chǎn)生的,這種錯誤要在編譯階段排除,否則程序不可能運行。除,否則程序不可能運行。 邏輯錯誤邏輯錯誤是指程序編譯正常,也能運行,是指程序編譯正常,也能運行,但結(jié)果不是人們所期待的。但結(jié)果不是人們所期待的。1 運行時錯誤運行時錯誤是指程序運行過程中出現(xiàn)是指程序運行過程中出現(xiàn)了一個不可能執(zhí)行的操作,就會出現(xiàn)運行了一個不可能執(zhí)行的操作,就會出現(xiàn)運行時錯誤,運行時錯

2、誤有時也可以由邏輯錯時錯誤,運行時錯誤有時也可以由邏輯錯誤引起。誤引起。 異常處理異常處理的主要目的是即使在程序運的主要目的是即使在程序運行時發(fā)生了錯誤,也要保證程序能正常結(jié)行時發(fā)生了錯誤,也要保證程序能正常結(jié)束,避免由于錯誤而使正在運行的程序中束,避免由于錯誤而使正在運行的程序中途停止。途停止。2什么是異常?l異常處理機制異常處理機制是是JAVAJAVA語言的重要特征之一。通過異常語言的重要特征之一。通過異常處理機制處理機制可防止程序執(zhí)行期間因出現(xiàn)錯誤而造可防止程序執(zhí)行期間因出現(xiàn)錯誤而造成不可預(yù)料的結(jié)果。成不可預(yù)料的結(jié)果。l一個好的應(yīng)用程序,除了具備用戶要求的功能外,一個好的應(yīng)用程序,除了具

3、備用戶要求的功能外,還要還要求能預(yù)見程序執(zhí)行過程中可能產(chǎn)生的各種異求能預(yù)見程序執(zhí)行過程中可能產(chǎn)生的各種異常,并把處理異常的功能包括在用戶程序中。常,并把處理異常的功能包括在用戶程序中。3n異常是異常是程序執(zhí)行期間程序執(zhí)行期間發(fā)生的各種意外或錯誤。發(fā)生的各種意外或錯誤。比如說: 用戶輸入出錯 所需文件找不到 運行時磁盤空間不夠 內(nèi)存不夠 算術(shù)運算錯 (數(shù)的溢出,被零除) 數(shù)組下標越界 4在在Java程序運行過程中,產(chǎn)生的異常通常有三種類型:程序運行過程中,產(chǎn)生的異常通常有三種類型:q一是一是JAVA虛擬機由于某些內(nèi)部錯誤產(chǎn)生的異常,這虛擬機由于某些內(nèi)部錯誤產(chǎn)生的異常,這類異常不在用戶程序的控制之

4、內(nèi),也不需要用戶處類異常不在用戶程序的控制之內(nèi),也不需要用戶處理這類異常;理這類異常;q二是標準異常類,由二是標準異常類,由java系統(tǒng)預(yù)先定義好的。這類系統(tǒng)預(yù)先定義好的。這類異常是由程序代碼中的錯誤而產(chǎn)生的,如:以零為異常是由程序代碼中的錯誤而產(chǎn)生的,如:以零為除數(shù)的除法,訪問數(shù)組下標范圍以外的數(shù)組元素,除數(shù)的除法,訪問數(shù)組下標范圍以外的數(shù)組元素,訪問空對象內(nèi)的信息,這是需要用戶程序處理的異訪問空對象內(nèi)的信息,這是需要用戶程序處理的異常。常。q三是根據(jù)需要在用戶程序中自定義的一些異常類。三是根據(jù)需要在用戶程序中自定義的一些異常類。5lJavaJava中所有的異常都是用類表示的,在中所有的異常

5、都是用類表示的,在JAVAJAVA中預(yù)定中預(yù)定義了很多異常類,每個代表了一種類型的運行錯誤。義了很多異常類,每個代表了一種類型的運行錯誤。當程序發(fā)生異常時,會生成某個異常類的對象。當程序發(fā)生異常時,會生成某個異常類的對象。lJavaJava解釋器可以監(jiān)視程序中發(fā)生的異常,如果程序解釋器可以監(jiān)視程序中發(fā)生的異常,如果程序中產(chǎn)生的異常與系統(tǒng)中預(yù)定義某個異常類相對應(yīng),系中產(chǎn)生的異常與系統(tǒng)中預(yù)定義某個異常類相對應(yīng),系統(tǒng)就自動產(chǎn)生一個該異常類的對象,就可以用相應(yīng)的統(tǒng)就自動產(chǎn)生一個該異常類的對象,就可以用相應(yīng)的機制處理異常,確保程序能夠安全正常地繼續(xù)運行。機制處理異常,確保程序能夠安全正常地繼續(xù)運行。l異

6、常對象中含有這種運行錯誤的信息和異常發(fā)生時異常對象中含有這種運行錯誤的信息和異常發(fā)生時程序的運行狀態(tài)。程序的運行狀態(tài)。6二、二、JavaJava中標準異常類的層次結(jié)構(gòu)中標準異常類的層次結(jié)構(gòu) 針對各種類型的異常,針對各種類型的異常,JavaJava定義了許多定義了許多標準異常類標準異常類,所有的,所有的JavaJava異常類都是系統(tǒng)類異常類都是系統(tǒng)類庫中的庫中的ExceptionException類的子類,它們分布在類的子類,它們分布在java.langjava.lang、java.iojava.io、java.utiljava.util和和包中。每個異常類對應(yīng)一種特定的包中。每個異常類對應(yīng)一種

7、特定的運行錯誤,各個異常類采用繼承的方式進行運行錯誤,各個異常類采用繼承的方式進行組織。異常類的層次結(jié)構(gòu)圖如下圖所示:組織。異常類的層次結(jié)構(gòu)圖如下圖所示:7JavaJava中異常類的結(jié)構(gòu):中異常類的結(jié)構(gòu):Throwable類類Error類類ExceptionException類類 RuntimeException類類ArithmeticException類類IndexOutofBoundException類類ArrayIndexOutofBoundsException類類IoException類類FileNotFoundException類類EOFException類類在在Java.lang包

8、包在在Java.io包包8uThrowableThrowable類類有兩個直接子類:有兩個直接子類: ErrorError(致(致命錯誤)命錯誤) 和和ExceptionException(異常)。(異常)。uErrorError類型類型的異常與的異常與JAVAJAVA虛擬機本身發(fā)生的虛擬機本身發(fā)生的錯誤有關(guān),這類異常由錯誤有關(guān),這類異常由javajava直接處理,用直接處理,用戶程序一般不能太做什么,只能等待系統(tǒng)戶程序一般不能太做什么,只能等待系統(tǒng)通知用戶關(guān)閉程序。通知用戶關(guān)閉程序。u用戶程序產(chǎn)生的錯誤由用戶程序產(chǎn)生的錯誤由ExceptionException的子類表的子類表示。用戶程序應(yīng)該

9、處理這類異常。示。用戶程序應(yīng)該處理這類異常。9、ThrowableThrowable類類u 該類屬于該類屬于Java.lang包,是所有異常包,是所有異常類的父類在類的父類在Throwable類中定義了描類中定義了描述異常發(fā)生的位置和所有異常類共同需述異常發(fā)生的位置和所有異常類共同需要的內(nèi)容要的內(nèi)容10Throwable類的構(gòu)造函數(shù)(1) public Throwable() 以以nullnull作為錯誤信息串內(nèi)容創(chuàng)建作為錯誤信息串內(nèi)容創(chuàng)建ThrowableThrowable對象,同時對象,同時調(diào)用該對象的另一方法調(diào)用該對象的另一方法fillInStackTracefillInStackTra

10、ce記錄異常發(fā)生的位記錄異常發(fā)生的位置。置。 (2) public Throwable(String message)以以message的內(nèi)容作為錯誤信息串創(chuàng)建的內(nèi)容作為錯誤信息串創(chuàng)建Throwable對象,同時調(diào)對象,同時調(diào)用該對象的另一方法用該對象的另一方法fillInStackTrace。11Throwable類的主要成員函數(shù) 如果創(chuàng)建當前對象時以如果創(chuàng)建當前對象時以message的內(nèi)容作為錯誤信息串,本方法的內(nèi)容作為錯誤信息串,本方法返回串變量返回串變量message的內(nèi)容;若創(chuàng)建當前對象時未使用參數(shù)則返的內(nèi)容;若創(chuàng)建當前對象時未使用參數(shù)則返回回null。(1) public Stri

11、ng getMessage()(2) public String toString()若當前對象包含錯誤信息,本方法返回的字符串由三部分組成:若當前對象包含錯誤信息,本方法返回的字符串由三部分組成:當前對象的類名,一個冒號和一個空格,錯誤信息的字符串;當前對象的類名,一個冒號和一個空格,錯誤信息的字符串;若當前對象未包含錯誤信息則僅返回當前對象的類名。若當前對象未包含錯誤信息則僅返回當前對象的類名。12Throwable類的主要成員函數(shù)(續(xù))將跟蹤棧中的信息輸出,輸出的第一行是當前對象將跟蹤棧中的信息輸出,輸出的第一行是當前對象toString( )的的返回值,其余各行是跟蹤棧中的信息。返回值

12、,其余各行是跟蹤棧中的信息。 (3) public void printStackTrace()(4) public Trowable fillInStackTrace()將當前異常對象的發(fā)生位置將當前異常對象的發(fā)生位置 (類、方法和所在文件的行號類、方法和所在文件的行號) 記錄記錄到跟蹤棧對象中。到跟蹤棧對象中。13 Error類是類是Throwable類的子類,由系統(tǒng)保留,類的子類,由系統(tǒng)保留,用戶不能使用。也就是說,用戶不能使用。也就是說, Error類型的錯誤不允類型的錯誤不允許用戶插手處理,由許用戶插手處理,由Java系統(tǒng)自行處理。系統(tǒng)自行處理。qErrorError類描述系統(tǒng)錯誤:

13、如將字節(jié)碼裝入內(nèi)存的過類描述系統(tǒng)錯誤:如將字節(jié)碼裝入內(nèi)存的過程中和對字節(jié)碼進行檢查的過程中遇到的問題、程中和對字節(jié)碼進行檢查的過程中遇到的問題、javajava的內(nèi)部錯誤、資源耗盡的情況。的內(nèi)部錯誤、資源耗盡的情況。q這類異常由這類異常由javajava直接處理,用戶程序不要理會這類直接處理,用戶程序不要理會這類異常。異常。、ErrorError類類14 Exception類是類是Throwable類的子類,用戶程序中可以直類的子類,用戶程序中可以直接使用接使用Exception類處理類處理Exception類型的異常。類型的異常。Exception類不僅繼承了類不僅繼承了Throwable類

14、的方法,同時定義以下兩個構(gòu)造函類的方法,同時定義以下兩個構(gòu)造函數(shù):數(shù): public Exception() public Exception(String s) 說明:說明: 字符串字符串s用來接收傳入的字符串信息,該信息通常是用來接收傳入的字符串信息,該信息通常是 對錯誤的描述。對錯誤的描述。3 3、ExceptionException類類15異常程序舉例:異常程序舉例:/java直接處理運行時異常直接處理運行時異常class TestSystemException public static void main(String args) intnum =new int2; for(int

15、 i=1;i4) throw (new ArrayIndexOutOfBoundsException(); System.out.println(After throw ArrayIndexOutOfBoundsException); 23Throw語句舉例3class Throw_Exp3 public static void main(String args) int a=5,b=0,c=1,2,3,4,5; System.out.println(Before throw); if(b=0) throw (new ArithmeticException (); System.out.pri

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

17、而不交給應(yīng)在程序中給出處理代碼。而不交給Java運行系統(tǒng)處運行系統(tǒng)處理,對于程序中那些不能預(yù)測的異常,可交給理,對于程序中那些不能預(yù)測的異常,可交給Java運運行行 系統(tǒng)處理。系統(tǒng)處理。 要由程序自己捕捉和處理異常,需要建立要由程序自己捕捉和處理異常,需要建立try - catch-finally語句塊。語句塊。25try try - - catchcatch語句塊格式:語句塊格式:try /在此區(qū)域內(nèi)或能發(fā)生異常在此區(qū)域內(nèi)或能發(fā)生異常; catch(異常類異常類1 e1) /處理異常處理異常1; catch(異常類異常類n en) /處理異常處理異常n; finally /不論異常是否發(fā)生不

18、論異常是否發(fā)生,都要執(zhí)行的部分都要執(zhí)行的部分; 被監(jiān)視的塊被監(jiān)視的塊該該catch子句能夠捕捉子句能夠捕捉和處理的異常類型和處理的異常類型26(1 1)將可能發(fā)生異常的程序代碼放置在)將可能發(fā)生異常的程序代碼放置在trytry程序塊中。如果程序塊中。如果該塊內(nèi)的代碼出現(xiàn)了異常,系統(tǒng)將終止該塊內(nèi)的代碼出現(xiàn)了異常,系統(tǒng)將終止trytry塊代碼的執(zhí)行,塊代碼的執(zhí)行,自動跳轉(zhuǎn)到所發(fā)生的異常類對應(yīng)的自動跳轉(zhuǎn)到所發(fā)生的異常類對應(yīng)的catchcatch塊中,執(zhí)行該塊中塊中,執(zhí)行該塊中的代碼。如果程序運行正常,后面的各的代碼。如果程序運行正常,后面的各catchcatch塊不起任何作塊不起任何作用。用。(2

19、2)finallyfinally塊是個可選項,無論異常是否發(fā)生,塊是個可選項,無論異常是否發(fā)生,finallyfinally塊塊的代碼必定執(zhí)行。通常把對各種異常共同處理部分放在的代碼必定執(zhí)行。通常把對各種異常共同處理部分放在finallyfinally塊中,如輸出統(tǒng)一信息、釋放資源、清理內(nèi)存、關(guān)塊中,如輸出統(tǒng)一信息、釋放資源、清理內(nèi)存、關(guān)閉已打開的文件等。閉已打開的文件等。(3 3)一個)一個trytry塊可以對應(yīng)多個塊可以對應(yīng)多個catchcatch塊,用于對多個異常類進塊,用于對多個異常類進行捕獲。但最多只能選中一個執(zhí)行。行捕獲。但最多只能選中一個執(zhí)行。(4 4)異常對象與)異常對象與ca

20、tchcatch塊中聲明的實例的匹配原則:塊中聲明的實例的匹配原則:異常對象是異常對象是catchcatch塊中聲明的異常類的實例塊中聲明的異常類的實例; ;異常對象是異常對象是catchcatch塊中聲明的異常類的某一子類的實例塊中聲明的異常類的某一子類的實例; ;Try-catch-finally結(jié)構(gòu)說明:27try - catch-finally語句舉例1class Try_Catch_Exp1public static void main(String args) int d=0,a; try System.out.println(Before throw Exception); a=

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

22、System.out.println(捕獲的異常為捕獲的異常為+e); finally System.out.println(這是所有這是所有catch塊的共有部分!塊的共有部分!); System.out.println(try-catch-finally塊后面的語句塊后面的語句); 28try - catch-finally語句舉例2class 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) th

23、row (new ArrayIndexOutOfBoundsException(); System.out.println (After throw); catch(ArrayIndexOutOfBoundsException e) System.out.println(處理數(shù)組下標越異常的處理數(shù)組下標越異常的catch語句塊捕獲了語句塊捕獲了異常!異常!); System.out.println(捕獲的異常為捕獲的異常為+e); finally System.out.println(這是所有這是所有catch塊的共有部分!塊的共有部分!); System.out.println(try-ca

24、tch-finally塊后面的語句塊后面的語句); 29程序設(shè)計舉例:n求三角形的面積或周長。注意:三角形的三條邊通過鍵盤輸入,輸入的數(shù)值構(gòu)不成三角形的話,需要重新輸入。30六、用戶自定義的異常類 盡管盡管JavaJava提供了很多異常類,但用戶還是可以根據(jù)需要定義提供了很多異常類,但用戶還是可以根據(jù)需要定義自己的異常類,即創(chuàng)建自定義異常類。自己的異常類,即創(chuàng)建自定義異常類。 說明:說明:(1 1)用戶自定義的異常類必須是)用戶自定義的異常類必須是ThrowableThrowable類或類或ExceptionException類類的子類。的子類。(2 2)自定義的異常類,一般只要聲明兩個構(gòu)造方

25、法,一個是)自定義的異常類,一般只要聲明兩個構(gòu)造方法,一個是不用參數(shù)的,另一個以字符串為參數(shù)。作為構(gòu)造方法參數(shù)的不用參數(shù)的,另一個以字符串為參數(shù)。作為構(gòu)造方法參數(shù)的字符串應(yīng)當反映異常的信息。字符串應(yīng)當反映異常的信息。31其一般形式為:其一般形式為:class 自定義異常類名自定義異常類名 extends Exception 異常類體異常類體;用戶自定義的異常類格式:32用戶自定義的異常類說明:u自定義異常類自定義異常類class MyException extends Exception u用戶定義的異常同樣要用用戶定義的異常同樣要用try-catch捕獲捕獲,但必須由但必須由用戶自己拋出用戶

26、自己拋出 throw new MyException().33用戶自定義的異常類舉例:class Exception_exppublic 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 m) throws UserException if (n0| m0) throw new UserException(); return n+m; class UserException extends ExceptionUserException()super(數(shù)據(jù)為負數(shù)數(shù)據(jù)為負數(shù));34七、

溫馨提示

  • 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

提交評論