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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第1313章章 異常處理異常處理立體化教材計算機系列 Java程序設計程序設計 2 立體化教材計算機系列 Java程序設計程序設計 3本章知識重點3132異異 常常異常處理機制異常處理機制異常類異常類異常的類別異常的類別 捕獲異常捕獲異常拋出異常拋出異常創(chuàng)建自定義異常創(chuàng)建自定義異常異常處理的作用異常處理的作用立體化教材計算機系列 Java程序設計程序設計 4 異常類 我們總是試圖避免在軟件程序中錯誤的發(fā)生,但是百分之百沒有錯誤的程序是不存在的。無論怎樣,如果我們能適當?shù)奶幚礤e誤,將會極大的改善程序的可讀性、可靠性以及可維護性。Java編程語言使用異常來處理錯誤。這章主要講述在什么時候和怎樣使

2、用異常來處理錯誤立體化教材計算機系列 Java程序設計程序設計 5異常處理程序的基本形式異常處理程序的基本形式method() throws ExceptionType2,ExceptionType3,try /程序塊程序塊 catch (ExceptionType1 e) / 對對ExceptionType1的處理的處理 catch (ExceptionType2 e) / 對對ExceptionType2的處理,處理了一部分,的處理,處理了一部分,throw(e); /再拋出這個再拋出這個“異常異?!苯o上層的調用者給上層的調用者finally 立體化教材計算機系列 Java程序設計程序設計

3、 6異常對象異常對象每個異常都是一個對象,它是Throwable類或其它子類的實例.當一個方法出現(xiàn)異常后便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常并進行處理。Throwable類有兩個標準子類:錯誤類:java.lang.Error錯誤Error類一般是指虛擬機相關的問題,異常類:java.lang.Exception異常Exception類則是指一些可以被捕獲且可能恢復的異常情況,如數(shù)組下標越界 立體化教材計算機系列 Java程序設計程序設計 7Java異常類的繼承關系 Exception異常又分為異常又分為RuntimeException和和non-R

4、untimeException兩大類異常。兩大類異常。立體化教材計算機系列 Java程序設計程序設計 8異常實例設定一個名稱為isLegal的變量來檢查數(shù)據(jù)是否合法,如果數(shù)據(jù)大于0時,返回合法值,否則視為不合法,拋出“異?!?。 int isLegal(int dt) throws LowZeroException /這種定義本文中均稱為方法與“異?!蓖ㄟ^throws建立了關聯(lián)if(dt=0) return data; else throw new LowZeroException(); /*自已寫的異常類,繼承自Exception*/ class LowZeroException extend

5、s Exception public LowZeroException() super(); 立體化教材計算機系列 Java程序設計程序設計 9異常的類別在實際的程序開發(fā)中,異常無處不在,并且種類繁多。區(qū)分什么情況下會出現(xiàn)什么樣的異常是十分必要的。兩個不同的角度來區(qū)分異常的種類: 異常發(fā)生的原因以 編譯時對異常的檢查。立體化教材計算機系列 Java程序設計程序設計 10異常的類別種類313233Java虛擬機所檢測到的非正常的執(zhí)行狀態(tài),一般來說這些狀態(tài)在編碼的時候比較難以檢測,直到運行的時候才會暴露出來。是Java語言中具有throw關鍵字的語句被執(zhí)行的時候異步異常立體化教材計算機系列 Jav

6、a程序設計程序設計 11無論是Java的API中定義的諸多異常類還是我們自己定義的異常類(自定義異常在下面本章后面有詳細的說明),根據(jù)編譯器對異常的檢查情況,又可以分為可檢測異常和不可檢測異常兩種 異常的類別立體化教材計算機系列 Java程序設計程序設計 12可檢測異常常見的可檢測異常有:常見的可檢測異常有:ClassNotFoundException;/沒有找到指定類的定義IOException;/指示產生某種輸入/輸出異常。FileNotFoundException;/文件沒有找到異常。ArithmeticException立體化教材計算機系列 Java程序設計程序設計 13 異常處理機制

7、捕獲異常拋出異常創(chuàng)建自定義異常異常處理的作用立體化教材計算機系列 Java程序設計程序設計 14捕獲異常Java的異常處理是通過5個關鍵詞來實現(xiàn)的:try、catch、throw、throws和finally和所有的捕獲異常程序一樣,第一步是用try關鍵字選定監(jiān)控異常的代碼范圍,然后在這段程序之后使用catch關鍵字捕獲異常,每個try代碼塊可以使用多個catch代碼塊來對應,而catch語句需要指名它所捕獲的異常的類型名。立體化教材計算機系列 Java程序設計程序設計 15捕獲異常實例isLegal方法用來判斷輸入int類型的參數(shù)iData是否合法,如果合法,便將合法的返回參數(shù)賦值給data

8、,如果不合法,則拋出某種異常。 異常拋出后,我們在捕獲模塊(catch)的大括號中打印出錯誤int MyMethod(int iData) int data = 0; try int data = isLegal(iData); catch(xException e) System.out.println(發(fā)生數(shù)據(jù)錯誤!); return data;立體化教材計算機系列 Java程序設計程序設計 16拋出異常 若在try塊中拋出的異常沒有能夠捕獲它的catch塊,或捕獲這個異常但不想立即處理,則Java將退出這個方法,并將其返回到上一級處理,如此不斷地遞歸向上直到最外一級。同時,在方法的聲明中

9、要指定方法中可能產生的異常,使這個方法的調用者準備好處理這種異常的代碼,這種類型的異常在此方法的調用者中得到了處理。調用者可能自己處理這種異常,也可能將這個異常放給它的調用者。異常就這樣逐級上溯,直到找到處理它的代碼為止。如果沒有任何代碼來捕獲并處理這個異常,Java將結束這個程序的執(zhí)行立體化教材計算機系列 Java程序設計程序設計 17拋出異常的情況Java可能會拋出異常的情況包括:調用的方法拋出了異常、檢測到了錯誤并使用throw語句拋出異常、程序代碼有錯誤,從而導致異常,比如數(shù)組越界錯誤、Java運行時刻系統(tǒng)產生內部錯誤。當前兩種異常發(fā)生時,應該告訴使用這個方法的人,此方法強迫Java拋

10、出異常。因為任何拋出異常的方法都是導致程序死亡的陷阱,如果沒有任何代碼來處理方法拋出的異常,就會導致程序結束立體化教材計算機系列 Java程序設計程序設計 18拋出異常步驟確定異常類確定異常類創(chuàng)建異常類的實例創(chuàng)建異常類的實例拋出異常拋出異常立體化教材計算機系列 Java程序設計程序設計 19拋出異常實例public class ExceptionUse /可能會拋出異常類的方法public static void throwException() throws Exception System.out.println(下面產生一個Io異常并將其拋出!); /拋出異常 throw new Run

11、timeException(MyException); public static void main(String args) try throwException(); /捕獲異 catch(Exception re) System.out.println(捕獲Io異常:+re); 立體化教材計算機系列 Java程序設計程序設計 20程序的輸出結果代碼在main()方法中調用了throwException()方法,此方法的聲明中可以看到,它可能會拋出IoException異常。再看此方法的定義,它使用new運算符實例化了一個RuntimeException 類,并使用throw語句將其拋出

12、。調用這個方法后,異常被拋出,catch語句進行捕獲,并打印出異常信息立體化教材計算機系列 Java程序設計程序設計 21創(chuàng)建自定義異?,F(xiàn)實世界是非常復雜的,常常會有一些特殊的約束要求。例如我們制作一個統(tǒng)計河堤水位的軟件,水位過高的時候,對程序本身只是一個較大的數(shù)字而已,并不會引發(fā)Java類庫中的異常;但對于現(xiàn)實中的情況,水位過高就是一個致命的異常。這種情況下,Java類庫中的異常處理類已經(jīng)不能滿足要求,我們需要拋出一個新的異常來提示過高的水位:一個自己定義的異常立體化教材計算機系列 Java程序設計程序設計 22自定義語法這里的extends Exception就是我們定義的這個異常類是從j

13、ava類庫中的Exception這個類派生的,也就是說,我們自定義的異常類可以擁有Exception這個類的全部的內容,另外,還可以再寫一些我們需要的內容在里面創(chuàng)建自己的異常類非常的簡單,可以用下面的聲明語言來定義:class 自定義異常名 xtends Exception立體化教材計算機系列 Java程序設計程序設計 23自定義異常實例一假如我們需要拋出一個提示水位過高的異常,我們可以寫一個像下面這樣的異常類class MyException extends Exceptionprivate int i;MyException(int a) i = a; public String toSt

14、ring() return “水位過高”; 立體化教材計算機系列 Java程序設計程序設計 24自定義異常實例二綜合前面幾節(jié)的知識,我們寫一個拋出這個異常的程序來測試一下這個自定義的異常類,同樣的還在這個類中,建立一個拋出這個異常的方法:Static void method(int a) throws MyException/聲明這個方法會拋出MyException異常If(a 10) throw new MyException(a);/主動拋出MyException(a)立體化教材計算機系列 Java程序設計程序設計 25自定義異常實例三當我們調用類CatchDemo中的靜態(tài)方法method

15、(int a)的時候,如果我們將大于10 的參數(shù)賦值給method方法的時候,就會拋出我們上面寫的水位過高的異常。除了需要一個拋出異常的方法,運行這個方法還需要在main方法中調用這個方法:Public static void main(string args) try method(11);Catch(MyExceptin e)System.out.println(e.toSring();立體化教材計算機系列 Java程序設計程序設計 26實例四運行上面的程序,在控制臺的輸出界面中,我們可以觀察到下圖的結果:綜上所述,當提供一些特定的功能用Java類時,需要保證類之間有良好的關系,而且類之間

16、的接口易于理解和實現(xiàn)。對于異常類一樣,可以定義新的異常類。創(chuàng)建自己的異常類更便于維護和管理立體化教材計算機系列 Java程序設計程序設計 27 異常處理的作用在傳統(tǒng)的非面向對象的編程語言中,并沒有一個規(guī)范和穩(wěn)定的錯誤處理機制,編程者必須考慮到在程序中可能出現(xiàn)的各種問題,并且自己定義一種可以表示異常信息的方式最常見的方式就是使用方法返回值進行處理。編寫返回一個執(zhí)行結果或者狀態(tài)代碼的方法,調用者根據(jù)返回的執(zhí)行結果狀態(tài)代碼判斷運行結果的正常或者失敗立體化教材計算機系列 Java程序設計程序設計 28異常處理的缺點假如狀態(tài)代碼返回一個錯誤的狀態(tài)代碼,則進行相應的處理,顯示一個錯誤頁面或錯誤信息。通過返

17、回值進行處理的方法是有效的,但有許多不足之處對于編程人員來說,增加了他們的負擔。對于編寫的程序來說,則有以下幾個缺點:出錯處理不規(guī)范,降低了程序的可讀性,程序復雜,可靠性差,返回信息有限, 返回代碼標準化困難立體化教材計算機系列 Java程序設計程序設計 29異常處理的優(yōu)點異常處理的方式和傳統(tǒng)的方式有所不同,當一個方法引發(fā)一個異常之后,可以將異常拋出,由該方法的直接或間接調用者處理這個異常。這就是常說的catch-throw(捕獲-拋出)方式采用這種處理方式具有以下幾個優(yōu)點:錯誤的處理變得規(guī)范化,把錯誤代碼與常規(guī)代碼分開,可以在catch中傳播錯誤信息,可以對錯誤類型分組,方便定位錯誤和維護立

18、體化教材計算機系列 Java程序設計程序設計 30經(jīng)典練習題填空題throw語句的作用是 _ 。Exception又分為 _和 _ 異常。Java中,異常分為 _和_兩類。Throwable類有兩個重要子類:_和_ 。立體化教材計算機系列 Java程序設計程序設計 31下面程序段的執(zhí)行結果是_ 。public class Test public static void main(String args) try return;finallySystem.out.println(Finally);經(jīng)典練習題立體化教材計算機系列 Java程序設計程序設計 32選擇題異常產生的原因很多,常見的有( )。A.程序設計本身的錯誤B.程序運

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論