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

下載本文檔

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

文檔簡介

1、異常處理n異常概述nJava異常的層次關(guān)系n捕獲異常異常n不要指望你的程序永遠不會出錯nJava程序運行過程中所發(fā)生的異常事件可分為兩類:n錯誤(Error):JVM系統(tǒng)內(nèi)部錯誤、資源耗盡等嚴重情況n異常(Exception): 其它因編程錯誤或偶然的外在因素導致的一般性問題,例如:n對負數(shù)開平方根n空指針訪問n試圖讀取不存在的文件n網(wǎng)絡(luò)連接中斷常見的處理異常的方法n由計算機系統(tǒng)本身直接檢測程序錯誤,遇到錯誤時程序立即終止運行n由程序員在程序設(shè)計中兼顧錯誤檢測,錯誤顯示和錯誤處理n一個好的健壯的程序,除了能夠?qū)崿F(xiàn)用戶要求的所有功能,還應(yīng)該能夠預測并處理程序執(zhí)行過程中出現(xiàn)的異常現(xiàn)象。異常是指程序

2、運行時出現(xiàn)異常而種植,如果不能對這些問題進行及時處理,程序的運行極不穩(wěn)定,程序經(jīng)常因出現(xiàn)異常而終止。nC語言處理異常的方法 if(布爾表達式1) 語句 ; /正常的程序 else if(布爾表達式2)語句;/處理異常的情況1 else if(布爾表達式3)語句; /處理異常的情況2n在Java中,把程序中運行的錯誤都看作一種異常類,通過對語句塊的檢測,一個程序中所有的異常都被收集起來放在程序某一段中處理。在Java的運行系統(tǒng)中,專門設(shè)置了一個調(diào)用棧,此棧中裝有執(zhí)行異常處理方法的指針,當程序運行時,系統(tǒng)會把收集到的異常和異常處理指針所指向的異常逐個比較,如果找到相符的類型,就轉(zhuǎn)向相應(yīng)的方法進行處

3、理。Exception類n在傳統(tǒng)的編程語言中,程序員只能通過函數(shù)的返回值來發(fā)出錯誤信息,這很容易導致很多錯誤。通常,用errno來存儲異常的類型,這個常常被誤用,因為一個errno的值有可能在被處理前被另外的錯誤覆蓋掉。nJava中,采用面向?qū)ο蟮姆椒ㄌ幚沓绦虍惓?,類中包含了對該異常相關(guān)信息和對異常的處理方法。異常例子public class ExceptionExampublic static void main(String args)int a,b;double c;a = Integer.parseInt(args0);b = Integer.parseInt(args1);c = a

4、/b;異常例子public class ExceptionExam1public static void main(String args)Java中的異常類nJava中所有的異常類和錯誤類都是Throwable類的直接或間接子類,他是java.lang包的類,派生了Exception和Error兩個子類。其中,Error類描述的錯誤是系統(tǒng)發(fā)生的內(nèi)部錯誤以及系統(tǒng)資源耗盡的情況,這是無法回復的系統(tǒng)錯誤,用戶應(yīng)用程序中不能使用該類。而Exception類可以供用戶的應(yīng)用程序使用Error/Exception層次圖ThrowableErrorExceptionEOFExceptionFileNotF

5、oundException AWTErrorVirtualMachineErrorArithmeticExceptionNullPointerExceptionLinkageError IOExceptionRuntimeExceptionInterruptedExceptionThreadDeath常見異常nRuntimeExceptionnArithmeticException:數(shù)學計算異常nNullPointerException:空指針異常nNegativeArraySizeException:負數(shù)組長度異常nArrayOutOfBoundsException:數(shù)組索引越界異常nCla

6、ssNotFoundException:類文件未找到異常nClassCastException:造型異常nIOExceptionnFileNotFoundException:文件未找到異常nEOFException:讀寫文件尾異常nMalformedURLException:URL格式錯誤異常nSocketException:Socket異常Java異常處理機制nJava程序的執(zhí)行過程中如出現(xiàn)異常,會自動生成一個異常類對象,該異常對象將被提交給Java運行時系統(tǒng),這個過程稱為拋出(throw)異常。n當Java運行時系統(tǒng)接收到異常對象時,會尋找能處理這一異常的代碼并把當前異常對象交給其處理,這

7、一過程稱為捕獲(catch)異常。n如果Java運行時系統(tǒng)找不到可以捕獲異常的方法,則運行時系統(tǒng)將終止,相應(yīng)的Java程序也將退出。n程序員通常只能處理違例(Exception),而對錯誤(Error)無能為力。異常處理的try-catch-finally語句try/ 可能會拋出特定異常的代碼段catch(MyExceptionType myException)/ 如果myException 被拋出,則執(zhí)行這段代碼catch(Exception otherException)/如果另外的異常otherException被拋出,則執(zhí)行這段代碼 finally/無條件執(zhí)行的語句try-catch-

8、finallyntry將可能出現(xiàn)異常的代碼都放在try代碼塊中,當然,也可以將其他的一些不會引起異常的代碼也一并放到try代碼塊中ncatch 從句中引入一個可能出現(xiàn)的異常,一個try塊可以和多個catch塊配合以處理多個異常n當try塊內(nèi)的任何代碼拋出了由catch 子句指定的異常,則try代碼端中的程序?qū)K止執(zhí)行,并跳到相應(yīng)的catch代碼塊中來執(zhí)行n無論是否出現(xiàn)異常,程序最后都會執(zhí)行finally代碼塊中的內(nèi)容捕獲異常例子public class CatchExceptionpublic static void main(String args)tryFileInputStream f

9、is = new FileInputStream(c:/a.txt);int b;b = fis.read();while(b!= -1)b = fis.read();fis.close();catch(FileNotFoundException e)catch(IOException e1)異常處理n拋出異常n捕獲異常和拋出異常的結(jié)合使用n方法覆蓋時的異常處理n自定義異常nprintStackTrace()方法拋出異常n在定義一個方法的時候,如果并不能確定如何處理其中可能出現(xiàn)的異常,可以不在方法中對異常進行處理,而是將可能發(fā)生的異常讓這個方法的調(diào)用者來處理n可以對下列情形在方法定義中拋出異常

10、:n方法中調(diào)用了一個會拋出“已檢查異?!钡姆椒╪程序運行過程中發(fā)生了錯誤,并且用throw子句拋出了一個“已檢查異?!眓不要拋出如下異常:n從Error中派生的那些異常n從RuntimeException中派生的那些異常,如NullPointerException等Java異常調(diào)用棧機制n如果一個異常沒有在當前的try-catch模塊中得到處理,則它會拋出到它的調(diào)用方法。n如果一個異?;氐搅薽ain()方法,仍沒有得到處理,則程序會異常終止。throwsn方法中拋出異常的格式 methodName() throws /throws例子 public void readFile() throws

11、 FileNotFoundException,IOExceptionFileInputStream fis = new FileInputStream(c:/a.txt);int b;b = fis.read();while(b!= -1)b = fis.read();fis.close(); .throws例子 public void readFile() throws FileNotFoundException,IOExceptionFile f = new File(c:/a.txt);if (!f.exists()throw new FileNotFoundException(File

12、 cant be found!);FileInputStream fis = new FileInputStream(f);int b;b = fis.read();while(b!= -1)b = fis.read();fis.close(); 捕獲和拋出結(jié)合使用n捕獲異常和拋出異常的方式,并不是排它的,它們可以結(jié)合起來使用:nmethod() throws XXXExceptiontrycatch(XXXException e)throw e;n方法覆蓋中的異常n當子類中的方法覆蓋父類中的方法時,可以拋出異常n覆蓋方法拋出的異常,可以拋出與被覆蓋方法的相同的異?;蛘弑桓采w方法的異常的子類異

13、常方法覆蓋中的異常例子public class Parent public void methodA() throws IOException, RuntimeException / IO操作 -public class Child extends Parent public void methodA() throws FileNotFoundException, UTFDataFormatException, ArithmeticException / IO操作,數(shù)學運算 自定義異常類n可以通過繼承Exception或它的子類來實現(xiàn)自己的異常類n一般而言,對于自定義的異常類,會設(shè)計兩個構(gòu)造器

14、:一個默認的不帶參數(shù)的構(gòu)造器以及一個帶參數(shù)的構(gòu)造器,后者用于傳遞詳細的出錯信息。自定義異常類例子public class MyDivideException extends ArithmeticExceptionpublic MyDivideException()super();public MyDivideException(String msg)super(msg);public String toString()return 除以零引起的例外!;自定義異常類public class DivideExceptionTest public static void main(String ar

15、gs) int n=0,d=0; double q; try n=Integer.parseInt(args0); d=Integer.parseInt(args1); if(d=0) throw new MyDivideException(); q=(double)n/d; catch(MyDivideException e) Exception的printStackTrace()方法n利用Exception的printStackTrace()方法可以追蹤異常出現(xiàn)的執(zhí)行堆棧情況printStackTrace例子public class SelfDefinedException extends Exceptionpublic SelfDefinedException()super(自定義的例外類);printStackTrace()例子public class TestPrintStackTracepublic static void main(String args)tryfirstMethod();catch(SelfDefinedException e)e.printStackTrace();public static void firstMethod() throws SelfDefined

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論