異常_v1xin.ppt_第1頁(yè)
異常_v1xin.ppt_第2頁(yè)
異常_v1xin.ppt_第3頁(yè)
異常_v1xin.ppt_第4頁(yè)
異常_v1xin.ppt_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、異常,了解異常的定義 了解異常的分類 掌握 try、catch 和 finally 語(yǔ)句的用法 掌握throw、throws子句的用法 掌握如何定義自己的異常,目標(biāo),2007 iSoftStone Holdings Ltd. All Rights Reserved.,3,什么是異常?,異常類通常用來(lái)定義程序所遇到的輕微意外。可以寫代碼來(lái)處理異常并繼續(xù)程序執(zhí)行,而不是讓程序中斷。 例如:發(fā)生下列情況時(shí),會(huì)出現(xiàn)異常: 想打開的文件不存在 網(wǎng)絡(luò)連接中斷 受控操作數(shù)超出預(yù)定范圍 正在裝載的類文件丟失,在程序中發(fā)生錯(cuò)誤時(shí),發(fā)現(xiàn)錯(cuò)誤的方法能拋出一個(gè)異常到其調(diào)用程序。然后,調(diào)用方法捕獲該異常,以一定的方法處

2、理異常并繼續(xù)程序執(zhí)行。 這個(gè)方案給程序員一個(gè)寫處理程序的選擇,來(lái)處理異常。 它為系統(tǒng)和用戶之間提供了一種友好的交互方式。 增強(qiáng)程序的健壯性,異常機(jī)制有什么作用,public static void main(String args) int i = 0; String greetings = Hello world!, No, I mean it!, HELLO WORLD!; while (i 4) System.out.println (greetingsi); i+; ,示例(1),Hello world! No, I mean it! HELLO WORLD! Exception in

3、 thread main java.lang.ArrayIndexOutOfBoundsException: 3 原因: 當(dāng)i = 3是,按照循環(huán)中的規(guī)定,要輸出的greetings3不存在,超出了數(shù)組的邊界,因而產(chǎn)生異常。,運(yùn)行結(jié)果,2007 iSoftStone Holdings Ltd. All Rights Reserved.,7,異常體系結(jié)構(gòu),Error JVM系統(tǒng)內(nèi)部錯(cuò)誤,表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指望程序能處理這樣的情況。 Exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題,即如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況(比如剛才的數(shù)組越界)。,分類說(shuō)

4、明,JAVA異常類都是系統(tǒng)類庫(kù)中Exception類的子類。 Exception類是java.lang.Throwable類的一個(gè)子類,構(gòu)造函數(shù)為: public Exception(); public Exception(String s); 它從Throwable類那里繼承了若干方法。常用的為: public String toString():返回異常類信息 public void printStackTrace():在當(dāng)前標(biāo)準(zhǔn)輸出上輸出異常信息,異常類Exception,2007 iSoftStone Holdings Ltd. All Rights Reserved.,10,常見異常

5、,異常的處理主要包括捕捉異常、程序流程的跳轉(zhuǎn)和異常處理語(yǔ)句塊的定義等。當(dāng)一個(gè)異常被拋出時(shí),應(yīng)該有專門的語(yǔ)句來(lái)捕獲這個(gè)被拋出的異常對(duì)象,這個(gè)過(guò)程被稱為捕捉異常。當(dāng)一個(gè)異常類的對(duì)象被捕捉或接收后,用戶程序就會(huì)發(fā)生流程的跳轉(zhuǎn),系統(tǒng)中止當(dāng)前的流程而跳轉(zhuǎn)至專門的異常處理語(yǔ)句塊,或直接跳出當(dāng)前程序和Java虛擬機(jī)回到操作系統(tǒng),異常處理,在Java程序里,異常對(duì)象是依靠try/catch語(yǔ)句來(lái)捕捉和處理的。try/catch異常處理語(yǔ)句塊分為try語(yǔ)句塊和catch語(yǔ)句塊,其格式如下: try /try語(yǔ)句塊,可能產(chǎn)生異常情況 catch (SqlException e1) /catch語(yǔ)句塊,對(duì)異常進(jìn)行處

6、理 catch (NullPointException e2) /catch語(yǔ)句塊,對(duì)異常進(jìn)行處理 catch (Exception e3) /catch語(yǔ)句塊,對(duì)異常進(jìn)行處理 將能夠拋出異常的代碼放入try塊中,然后創(chuàng)建相應(yīng)的catch塊的列表。 如果生成的異常與catch中提到的相匹配,catch條件的塊語(yǔ)句就被執(zhí)行。 在try塊之后,可能有許多catch塊,每一個(gè)都處理不同的異常。一定要將特殊的異常寫在前面,try和catch語(yǔ)句,13,public static void main(String args) int i = 0; String greetings = Hello wor

7、ld!, No, I mean it!,HELLO WORLD!; try while (i 4) System.out.println (greetingsi); i+; / 當(dāng)try塊發(fā)生異常的時(shí)候,異常會(huì)被catch所捕獲 catch(Exception e) System.out.println(捕獲異常:+e.toString(); ,示例(2),多異常處理是通過(guò)在一個(gè)try塊后面定義若干個(gè)catch塊來(lái)實(shí)現(xiàn)的,每個(gè)catch塊用來(lái)接收和處理一種特定的異常對(duì)象 。,多異常的捕獲和處理,在設(shè)計(jì)catch塊處理不同的異常時(shí),一般應(yīng)注意如下 問(wèn)題: (1) catch塊中的語(yǔ)句應(yīng)根據(jù)異常的

8、不同而采取不同的處理方法,比較通用的操作是打印異常和與該異常相關(guān)的信息,包括異常名稱和產(chǎn)生異常的方法名等。 (2) 由于異常對(duì)象與catch塊的匹配是按照catch塊的先后排列順序進(jìn)行的,所以要處理多異常時(shí)應(yīng)注意認(rèn)真設(shè)計(jì)各catch塊的排列順序。 (3) 在用多catch語(yǔ)句時(shí),記住異常子類必須在它們?nèi)魏胃割愔笆褂檬呛苤匾?。這是因?yàn)檫\(yùn)用父類的catch語(yǔ)句將捕獲該類型及其所有子類類型的異常。這樣,如果子類在父類后面,子類將永遠(yuǎn)不會(huì)到達(dá),設(shè)計(jì)catch塊處理,finally語(yǔ)句只用來(lái)控制從trycatch語(yǔ)句轉(zhuǎn)移到另一部分前的一些必要的善后工作,這些工作包含了關(guān)閉文件或釋放其他有關(guān)系統(tǒng)資源。

9、finally語(yǔ)句執(zhí)行的是一種強(qiáng)制的無(wú)條件執(zhí)行,即無(wú)論在程序中是否出現(xiàn)異常,也不管出現(xiàn)的是哪一種異常,即使try代碼塊中包含有break、continue、return或者throw語(yǔ)句,都必須執(zhí)行finally塊中所包含的語(yǔ)句。 在出現(xiàn)和未出現(xiàn)異常的情況下都要執(zhí)行的代碼,可以放到finally子句中,finally語(yǔ)句,17,public static void main(String args) int i = 0; String greetings = Hello world!, No, I mean it!,HELLO WORLD!; try while (i 4) System.ou

10、t.println (greetingsi); i+; catch(Exception e) System.out.println(捕獲異常:+e.toString(); finally System.out.println(finally 繼續(xù)執(zhí)行); ,示例(3),Java應(yīng)用程序在運(yùn)行時(shí)如果出現(xiàn)了一個(gè)可識(shí)別的錯(cuò)誤,就會(huì)產(chǎn)生一個(gè)與該錯(cuò)誤相對(duì)應(yīng)的異常類的對(duì)象,這個(gè)對(duì)象包含了異常的類型和錯(cuò)誤出現(xiàn)時(shí)程序所處的狀態(tài)信息,這個(gè)異常對(duì)象首先被交給Java虛擬機(jī),由虛擬機(jī)來(lái)尋找具體的異常處理者。在Java中把產(chǎn)生異常對(duì)象并將其交給Java虛機(jī)的過(guò)程稱為稱為異常的拋出,異常的拋出,異常是通過(guò)關(guān)鍵字 thr

11、ow 拋出,程序可以用throw語(yǔ)句引發(fā)明確的異常。如: try if(flag0) throw new NullPointerException(); throw語(yǔ)句的操作數(shù)一定是Throwable類類型或Throwable子類類型的一個(gè)對(duì)象,使用 throw,如果一個(gè)方法可以導(dǎo)致一個(gè)異常但不處理它,就必須在方法聲明中包含一個(gè)throws子句。 一個(gè)throws子句列舉了一個(gè)方法可能引發(fā)的所有異常類型。(除Error類型以外) 一個(gè)方法可以引發(fā)的所有其他類型的異常必須在 throws子句中聲明。如果不這樣做,將會(huì)導(dǎo)致編譯錯(cuò)誤,throws,/ 定義方法的時(shí)候已經(jīng)定義了必須拋出了一個(gè)異常 pr

12、ivate void getConn()throws SQLException System.out.println(); public static void main(String args) ThrowsDemo t = new ThrowsDemo(); try /調(diào)用此方法的時(shí)候必須捕獲或者throws繼續(xù)向上一層拋, / 否則通不過(guò)編譯 t.getConn(); catch (SQLException e) e.printStackTrace(); ,示例(3),當(dāng)一個(gè)方法被覆蓋時(shí),覆蓋它的方法必須拋出相同的異?;虍惓5淖宇?。 如果父類拋出多個(gè)異常,那么重寫方法必須拋出那些異常的一

13、個(gè)子集,也就是說(shuō)不能拋出新的異常,注意,1 通過(guò)擴(kuò)展Exception 類來(lái)創(chuàng)建 2 包含一個(gè)構(gòu)造函數(shù)和方法,體系對(duì)應(yīng)的錯(cuò)誤信息 class MyException extends Exception private int idCode ; public MyException(String msg,int id) super(msg); this.idCode = id ; public int getIdCode() return idCode; ,自定義異常,public class MyExceptionDemo public double devide(int x,int y)throws MyException if(y0) throw new MyException(被除數(shù)為負(fù)數(shù),-1); return x/y; public static void main(String args) MyExceptionDemo t = new MyExceptionDemo(); try t.devide(10, -3); catch (MyException e) e.printStackTrace(); ,使用自己的異常,1 如果可以提前檢測(cè)出來(lái)的異常,應(yīng)該盡量避免使用,影響

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論