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

下載本文檔

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

文檔簡(jiǎn)介

1、異常處理機(jī)制異常處理機(jī)制主要內(nèi)容主要內(nèi)容v引入異常機(jī)制引入異常機(jī)制vJava的的異常處理異常處理 異常的拋出、捕獲與處理異常的拋出、捕獲與處理v自定義異常自定義異常v使用使用finally對(duì)錯(cuò)誤的處理對(duì)錯(cuò)誤的處理v程序執(zhí)行的錯(cuò)誤程序執(zhí)行的錯(cuò)誤v處理錯(cuò)誤處理錯(cuò)誤 向用戶通知錯(cuò)誤向用戶通知錯(cuò)誤 保存全部工作保存全部工作 讓用戶適當(dāng)?shù)赝顺龀绦蜃層脩暨m當(dāng)?shù)赝顺龀绦騰異常處理異常處理 JAVA檢測(cè)和報(bào)告錯(cuò)誤的機(jī)制檢測(cè)和報(bào)告錯(cuò)誤的機(jī)制處理錯(cuò)誤的方式處理錯(cuò)誤的方式v 函數(shù)式編程中,直接檢測(cè)調(diào)用函數(shù)返回值以確定錯(cuò)誤內(nèi)容,函數(shù)式編程中,直接檢測(cè)調(diào)用函數(shù)返回值以確定錯(cuò)誤內(nèi)容,存在的問題存在的問題 檢測(cè)錯(cuò)誤返回的編

2、碼工作量大檢測(cè)錯(cuò)誤返回的編碼工作量大,邏輯上復(fù)雜邏輯上復(fù)雜 返回的錯(cuò)誤信息有限,無(wú)詳細(xì)的位置、性質(zhì)等返回的錯(cuò)誤信息有限,無(wú)詳細(xì)的位置、性質(zhì)等v 異常處理異常處理 throws,使不能正常結(jié)束的方法拋出一個(gè)封裝了錯(cuò)誤使不能正常結(jié)束的方法拋出一個(gè)封裝了錯(cuò)誤信息的對(duì)象異常信息的對(duì)象異常 使用異常處理程序處理異常錯(cuò)誤使用異常處理程序處理異常錯(cuò)誤異常處理機(jī)制異常處理機(jī)制v Java中中定義了很多異常類,每個(gè)異常類都代表了一種運(yùn)定義了很多異常類,每個(gè)異常類都代表了一種運(yùn)行錯(cuò)誤,類中包含了該運(yùn)行錯(cuò)誤的信息和處理錯(cuò)誤的方法行錯(cuò)誤,類中包含了該運(yùn)行錯(cuò)誤的信息和處理錯(cuò)誤的方法等內(nèi)容。每當(dāng)?shù)葍?nèi)容。每當(dāng)Java程序運(yùn)

3、行過程中發(fā)生一個(gè)可識(shí)別的運(yùn)程序運(yùn)行過程中發(fā)生一個(gè)可識(shí)別的運(yùn)行錯(cuò)誤時(shí),即該錯(cuò)誤有一個(gè)異常類與之相對(duì)應(yīng)時(shí),系統(tǒng)都行錯(cuò)誤時(shí),即該錯(cuò)誤有一個(gè)異常類與之相對(duì)應(yīng)時(shí),系統(tǒng)都會(huì)產(chǎn)生一個(gè)相應(yīng)的該異常類的對(duì)象,即產(chǎn)生一個(gè)異常。一會(huì)產(chǎn)生一個(gè)相應(yīng)的該異常類的對(duì)象,即產(chǎn)生一個(gè)異常。一旦一個(gè)異常對(duì)象產(chǎn)生了,系統(tǒng)中就一定有相應(yīng)的機(jī)制來處旦一個(gè)異常對(duì)象產(chǎn)生了,系統(tǒng)中就一定有相應(yīng)的機(jī)制來處理它,確保不會(huì)產(chǎn)生死機(jī)、死循環(huán)或其他對(duì)操作系統(tǒng)的損理它,確保不會(huì)產(chǎn)生死機(jī)、死循環(huán)或其他對(duì)操作系統(tǒng)的損害,從而保證了整個(gè)程序運(yùn)行的安全性。這就是害,從而保證了整個(gè)程序運(yùn)行的安全性。這就是Java的的異常處理機(jī)制異常處理機(jī)制異常處理機(jī)制異常處理機(jī)

4、制v當(dāng)方法執(zhí)行過程中出現(xiàn)錯(cuò)誤而干擾了程序流程當(dāng)方法執(zhí)行過程中出現(xiàn)錯(cuò)誤而干擾了程序流程時(shí),會(huì)拋出一個(gè)異常,即構(gòu)造出一個(gè)異常類的時(shí),會(huì)拋出一個(gè)異常,即構(gòu)造出一個(gè)異常類的對(duì)象。對(duì)象。v異常類對(duì)象代表當(dāng)前出現(xiàn)的一個(gè)具體異常,該異常類對(duì)象代表當(dāng)前出現(xiàn)的一個(gè)具體異常,該對(duì)象封裝了異常的有關(guān)信息。對(duì)象封裝了異常的有關(guān)信息。v異常分為系統(tǒng)定義異常和用戶自定義異常。異常分為系統(tǒng)定義異常和用戶自定義異常。v異常拋出方式:異常拋出方式: 自動(dòng)拋出(系統(tǒng)定義異常)自動(dòng)拋出(系統(tǒng)定義異常) 用用throw語(yǔ)句拋出(用戶定義異常)語(yǔ)句拋出(用戶定義異常)異常類異常類Throwable類Exception類Error類自定

5、義異常類ArrayIndexOutOfBoundsException類NullPointerException類異常類異常類v Exception類定義的是較輕的錯(cuò)誤,用戶可以編寫代類定義的是較輕的錯(cuò)誤,用戶可以編寫代碼來處理這類錯(cuò)誤,并繼續(xù)程序的執(zhí)行。碼來處理這類錯(cuò)誤,并繼續(xù)程序的執(zhí)行。v Exception原因:原因: 打開的文件不存在。打開的文件不存在。 網(wǎng)絡(luò)連接中斷。網(wǎng)絡(luò)連接中斷。 操作數(shù)超過允許范圍。操作數(shù)超過允許范圍。 想要加載的類文件不存在。想要加載的類文件不存在。 試圖通過空的引用型變量訪問對(duì)象。試圖通過空的引用型變量訪問對(duì)象。 數(shù)組下標(biāo)越界。數(shù)組下標(biāo)越界。v Error類定義

6、的錯(cuò)誤是致命性錯(cuò)誤,一般會(huì)導(dǎo)致程序類定義的錯(cuò)誤是致命性錯(cuò)誤,一般會(huì)導(dǎo)致程序停止執(zhí)行。停止執(zhí)行。Exception類類v構(gòu)造方法構(gòu)造方法 Exception() Exception(String 異常描述異常描述)vException類的方法均繼承自類的方法均繼承自Throwable類類v方法方法 String getMessage() 返回返回異常描述。異常描述。 String toString() 返回異常對(duì)象詳細(xì)信息。返回異常對(duì)象詳細(xì)信息。 void printStackTrace() 打印異常發(fā)生的路徑,即引起異常的方法調(diào)用嵌套打印異常發(fā)生的路徑,即引起異常的方法調(diào)用嵌套序列。序列。系統(tǒng)

7、定義的異常類系統(tǒng)定義的異常類v ClassNotFoundException 未找到要加載的類未找到要加載的類v ArrayIndexOutOfBoundsException 數(shù)組越界使用數(shù)組越界使用v FileNotFoundException 未找到指定的文件或目錄未找到指定的文件或目錄v IOException 輸入、輸出錯(cuò)誤輸入、輸出錯(cuò)誤v NullPointerException 引用空的尚無(wú)內(nèi)存空間的對(duì)象引用空的尚無(wú)內(nèi)存空間的對(duì)象 系統(tǒng)將常見錯(cuò)誤予 定義為若干異常類 當(dāng)出現(xiàn)異常時(shí)自動(dòng) 拋出系統(tǒng)定義的異常類系統(tǒng)定義的異常類v ArithmeticException 算術(shù)錯(cuò)誤,如除數(shù)為

8、算術(shù)錯(cuò)誤,如除數(shù)為0v InterruptedException 一線程在睡眠、等待或其他原因暫停時(shí)被其他線程打斷一線程在睡眠、等待或其他原因暫停時(shí)被其他線程打斷v UnknownHostException 無(wú)法確定主機(jī)的無(wú)法確定主機(jī)的IP地址地址v SecurityException 安全性錯(cuò)誤,如安全性錯(cuò)誤,如Applet欲讀寫文件欲讀寫文件v MalformedURLException URL格式錯(cuò)誤格式錯(cuò)誤用戶定義的異常類用戶定義的異常類v 用戶自定義異常主要用來處理用戶程序中特定的邏輯用戶自定義異常主要用來處理用戶程序中特定的邏輯 運(yùn)行錯(cuò)誤。運(yùn)行錯(cuò)誤。 v 定義異常類定義異常類 cl

9、ass MyExp extends Exception /或繼或繼承其他異常類承其他異常類 /定義新的屬性定義新的屬性 /重載構(gòu)造方法重載構(gòu)造方法 例:例: MyExp(String msg) super(msg) / 重載原方法,或定義新方法重載原方法,或定義新方法 v 拋出異常類拋出異常類 : throw 異常類對(duì)象異常類對(duì)象 ; 例:例: throw new MyExp(“年齡超過規(guī)定年齡超過規(guī)定”) ; 例:例: throw new Exception() ;異常的產(chǎn)生異常的產(chǎn)生v自動(dòng)拋出異常自動(dòng)拋出異常 運(yùn)行異常運(yùn)行異常程序運(yùn)行中可自動(dòng)由程序運(yùn)行中可自動(dòng)由Java解釋器引發(fā)并處解釋器

10、引發(fā)并處理的異常;編程時(shí)不需捕獲或聲明。理的異常;編程時(shí)不需捕獲或聲明。 如:除以如:除以0、下標(biāo)越界、指針例外等、下標(biāo)越界、指針例外等 非運(yùn)行異常非運(yùn)行異??稍诰幾g期由編譯器確定某方法是否會(huì)發(fā)生可在編譯期由編譯器確定某方法是否會(huì)發(fā)生此類異常;必須編程時(shí)捕獲或聲明此類異常;必須編程時(shí)捕獲或聲明 如:如:IOException, InterruptedException異常的產(chǎn)生異常的產(chǎn)生v編程拋出異常:編程拋出異常: 在程序的相應(yīng)部分拋出異常:在程序的相應(yīng)部分拋出異常: throw new XXXException(); throw new XXXException(String descri

11、be);v 例例:String readData() throws EOFException. throw new EOFException(“error”);.v 警戒區(qū):可能會(huì)引起異常的代碼段警戒區(qū):可能會(huì)引起異常的代碼段 try 警戒區(qū)代碼警戒區(qū)代碼 /拋出例外拋出例外 catch(ExceptType e) /捕獲例外捕獲例外 例外處理代碼例外處理代碼/異常處理異常處理 后續(xù)語(yǔ)句后續(xù)語(yǔ)句v 若若try塊中出現(xiàn)異常,則控制轉(zhuǎn)向下面的異常處理部塊中出現(xiàn)異常,則控制轉(zhuǎn)向下面的異常處理部 分,然后執(zhí)行后續(xù)語(yǔ)句。分,然后執(zhí)行后續(xù)語(yǔ)句。v 若若try塊中沒有異常,則塊中沒有異常,則try塊執(zhí)行完,

12、控制轉(zhuǎn)向后塊執(zhí)行完,控制轉(zhuǎn)向后續(xù)語(yǔ)句。續(xù)語(yǔ)句。異常處理異常處理多個(gè)異常的處理多個(gè)異常的處理v可用一組并列的可用一組并列的catch塊處理多異常情況塊處理多異常情況try . . . catch( 異常類異常類1 e1) . . . catch( 異常異常類類2 e2) . . . . . .v匹配規(guī)則:匹配規(guī)則: 拋出對(duì)象與拋出對(duì)象與catch參數(shù)類型相同參數(shù)類型相同 拋出對(duì)象為拋出對(duì)象為catch參數(shù)類的子類參數(shù)類的子類 按先后順序捕獲按先后順序捕獲(注意注意catch塊書寫時(shí)的塊書寫時(shí)的排列順序排列順序: 先具體、后一般先具體、后一般),但只捕獲一次。,但只捕獲一次。異常處理過程異常處理過

13、程v 當(dāng)遇到關(guān)鍵字當(dāng)遇到關(guān)鍵字 throw 時(shí)就拋出一個(gè)異常時(shí)就拋出一個(gè)異常,將控制轉(zhuǎn)移將控制轉(zhuǎn)移到相關(guān)的到相關(guān)的 catch 塊中處理之塊中處理之v 如果產(chǎn)生異常的方法本身沒有相應(yīng)如果產(chǎn)生異常的方法本身沒有相應(yīng)catch 語(yǔ)句語(yǔ)句塊,則塊,則應(yīng)有應(yīng)有throws語(yǔ)句聲明例外退出當(dāng)前方法并轉(zhuǎn)向上一語(yǔ)句聲明例外退出當(dāng)前方法并轉(zhuǎn)向上一級(jí)調(diào)用此方法的方法的級(jí)調(diào)用此方法的方法的 catch 語(yǔ)句語(yǔ)句塊塊v 若始終沒有若始終沒有catch塊來處理則由運(yùn)行系統(tǒng)處理塊來處理則由運(yùn)行系統(tǒng)處理例例v例:例:ExceptionMethods.java 拋出拋出捕獲捕獲處理處理 異常的各方法異常的各方法public

14、 class ExceptionMethods public static void main(String args) try /拋出例外 throw new Exception(Heres my Exception); catch(Exception e) /捕獲例外 /處理例外 System.out.println(Caught Exception); System.out.println(e.getMessage(): + e.getMessage(); System.out.println(e.toString(): + e.toString(); System.out.printl

15、n(e.printStackTrace():); e.printStackTrace(); /end of main() /end of class自定義自定義異常異常類類v 聲明一個(gè)新的異常類,該異常類必須從聲明一個(gè)新的異常類,該異常類必須從Java已有定義已有定義的異常類繼承,如的異常類繼承,如Exception、IOException等等v 為新的異常類定義屬性和方法,或重載父類的屬性和為新的異常類定義屬性和方法,或重載父類的屬性和方法,使這些屬性和方法能夠體現(xiàn)該類所對(duì)應(yīng)的錯(cuò)誤方法,使這些屬性和方法能夠體現(xiàn)該類所對(duì)應(yīng)的錯(cuò)誤的信息。的信息。v 例:例:Inheriting.javaclas

16、s MyException extends Exception /自定義例外 public MyException() public MyException(String msg) super(msg); public class Inheriting public static void f( ) throws MyException System.out.println(Throwing MyException from f(); throw new MyException( ); /拋出自定義例外 public static void main(String args) try f( )

17、; /處理自定義例外 catch(MyException e) e.printStackTrace(); /end of main() /end of class Inheritingfinallytry.catch(A a).finallyvfinally: 不論是否有異常拋出,均執(zhí)行不論是否有異常拋出,均執(zhí)行v只有當(dāng)只有當(dāng)try塊中執(zhí)行塊中執(zhí)行System.exit()時(shí),會(huì)立時(shí),會(huì)立即結(jié)束程序。即結(jié)束程序。v用處:一般用來進(jìn)行一些用處:一般用來進(jìn)行一些“善后善后”操作,如系操作,如系統(tǒng)資源的釋放、文件的關(guān)閉等統(tǒng)資源的釋放、文件的關(guān)閉等v例:例:FinallyWorks.javapublic class FinallyWorks static int count = 0; public static void main(String args) while(true) try / count is zero first ti

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論