java第5章異常(精)_第1頁
java第5章異常(精)_第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余18頁可下載查看

下載本文檔

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

文檔簡介

1、 Java異常是Jam提供的用于處理程序中錯(cuò)誤 的一種機(jī)制。異常處理機(jī)制是用來處理程序錯(cuò)誤的有效機(jī) 制,以往需要由程序員完成的程序出錯(cuò)情況 判別,在Java中改為由系統(tǒng)承擔(dān)。通過系統(tǒng) 拋岀的異常,程序可以很容易地捕獲并處理 發(fā)生的異常情況。5.1 Java異常的概念異常是指程序運(yùn)行過程中出現(xiàn)的非正?,F(xiàn)象.所謂錯(cuò)誤是指在程序運(yùn)行的過程中發(fā)生的一些異常事件(如: 除0溢出.數(shù)組下標(biāo)越界,所要讀取的文件不存在)。設(shè)計(jì)良好的程序應(yīng)該在異常發(fā)生時(shí)提供處理這些錯(cuò)誤的方法, 使得程序不會(huì)因?yàn)楫惓5陌l(fā)生而阻斷或產(chǎn)生不可預(yù)見的結(jié)果1.拋岀異常;Java星這樣規(guī)定的: 當(dāng)語義限制被違反時(shí), 將 會(huì)拋岀(throw

2、)異常.即產(chǎn)生一個(gè)異常事件生成一個(gè)異常 對(duì)象.并把它提交給運(yùn)行系統(tǒng).再由運(yùn)行系統(tǒng)尋找相應(yīng)的代 碼來處理異常 一個(gè)異常對(duì)象可以由Java虛擬機(jī)來自動(dòng)產(chǎn)生. 也可以由運(yùn)行的方法生成“異常對(duì)象中包含了異常事件類型、 程序運(yùn)行狀態(tài)等必要信息2.處理異常:異常拋出后,運(yùn)行時(shí)系統(tǒng)從生成異常對(duì)象的代 碼開始.沿方法的調(diào)用棧逬行查找,直到找到包含相應(yīng)處理 的方法代碼.并把異常對(duì)象交給該方法為止.這個(gè)過程稱為 捕獲(catch)異常?;蚵暶鲯仐壆惓?。Public class Test public static void main(String args( inta0=1,2,3;for(inti=0;k4;k

3、*)System.out.println(ai);public void somnMo匕hod throws SomeException i (comeConditlon()throw nowipn (;5.1 Java異常的概念5.1JavsomnMothod ():)catch廳汛星絶槍Hi異當(dāng)?shù)臉?gòu)ift并With幵RuntimeException:一類特殊的異常.如被0除.數(shù)組下標(biāo)越界等 其產(chǎn)生比5.2 Java異常的分類 Exceptionjav lang ClSBNotFoundExceptlonIOBxcepeionInttirrupted ExceptionRuntineExce

4、peionArithnetxcSxoeptxon NulIP01 nterXxceptlenIndexOutOfBound sCxoepti on Kr r ay I tHlexOutObBouMlsKxception StrxnglndexOutObBoundsKxooptxonError:稱為錯(cuò)誤由Java虛擬機(jī)生成井拋岀.包括動(dòng)態(tài)準(zhǔn)接失敗.虛擬機(jī)錯(cuò)誤等.程序?qū)ζ洳蛔鎏幚?(也處理不了)Exception:所有異常類的父類, 其子類對(duì)應(yīng)了各種各樣可能岀現(xiàn)的異常事件.一般需要用戶必須顯式地聲明拋出或捕獲J較頻繁.處理麻煩.如果顯式的聲明或捕獲將會(huì)對(duì)程序可 変性和運(yùn)行效率影響很大因此由系統(tǒng)自動(dòng)

5、檢測井將它們交給妝省的 屏常處理程序(用戶可不必對(duì)其處理)import java.io.*;class Except ion Demo 1public static void main( String args )Fileinput Stream fis = new FilelnputStream(Mtext*); int b;while( (b=fis.read()!-1 )Sy stem. out. print ( b ):fis.ck)se();class ExceptionDemo2public static void main( String args( ) int a - 0;Sy

6、stem.out.println( 5/a);5.2 Java異常的分類1 .Exception異常類的子類(1)RuntimeException運(yùn)行時(shí)異常類(2)NoSuchMethodException方法未找到異常(3)java.awt.AWTException圖形界面異常類(4)java.io.lOException輸入輸出異常類(5)Exception異常類的其它子類(1)RuntimeException類主要包括以下異常子類:ArithmeticException算術(shù)異常類:表示遇到了異常的算術(shù)問 題.例如被0整5.2 Java異常的分類除.ArrayStoreException數(shù)

7、組存儲(chǔ)異常類,試圖把與數(shù)組類型不 相符的值存人數(shù)組 UClassCastException類型強(qiáng)制轉(zhuǎn)換異常類:試圖把一個(gè)對(duì)象 的引用強(qiáng)制轉(zhuǎn)換為不合適的類型“IndexOutOfBoundsException下標(biāo)越界異常類:下標(biāo)越界NullPointerException空指針異常類:試圖使用一個(gè)空的對(duì)象 引用SecuntyException違背安全原則異常類:檢測到了違反安全 的行為5.2 Java異常的分類(4) java.io.lOException類的子類有:lOException :申請(qǐng)I/O操作沒有正常完成。EOFException:在輸入操作正常結(jié)束前遇到了文件結(jié) 束符。FileN

8、otFoundException:在文件系統(tǒng)中,沒有找到由 文件名字符串指定的文件。5.2 Java異常的分類Exception異常類的其它子類:EmptyStackException:試圖訪問一個(gè)空堆棧中的元素NoSuchFieldException:試圖訪問一個(gè)不存在的域,NoSuchMethodException:試圖訪問不存在的方法。ClassNotFoundException:具有指定名字的類或接口沒 有被發(fā)現(xiàn)。CloneNotSupportedException:克隆一個(gè)沒有實(shí)現(xiàn)CloneableS口 的類。-1llegalAccessException:試圖用給岀了完整的路徑信息

9、 席字符串加載一個(gè)類。InstantiationException:試圖使用Class的newlnstance方法創(chuàng)建一個(gè)艮孑象實(shí)例。 InterruptedException:當(dāng)前的線程正在等待.而另一個(gè) 線程使用了Thread的interrupt方法中斷了當(dāng)前線程豪5.3異常的捕獲和處理 try代碼段包含可能產(chǎn)生異常的 代碼 try代碼段后跟有一個(gè)或多個(gè)catch代碼段,每個(gè)catch代碼段聲明其能處理 的一種特定類型的異常并提供 處理的方法”當(dāng)異常發(fā)生時(shí).程序會(huì)終止當(dāng) 前的流程.根據(jù)獲取異常的類 型去執(zhí)行相應(yīng)的catch代碼段?!?Finally段的代碼無論是否發(fā)生 異常都有執(zhí)行.異常處

10、理語句格式為:lry可能拋岀異常的語句 catch (異常類型e)catch(異常類型e)finally(最終處理注,父類異常的捕獲語句不可以寫在子類異常捕獲語句的上面。I 5.3異常的捕獲和處理try語句try譏旬指定啟代出誅段代出就是次捕伕并處刃例外的范隊(duì)存吹行過H屮.諄股代碼可韓:會(huì)嚴(yán)牛幷槍出 種哎幾種類叩的H用対絞.它鼠而的catchy句翌分網(wǎng)對(duì) 這吐舁朮儺相用的處HL如杲?jīng)]仃供外產(chǎn)生.所有的catch代砂投郡披崎過不執(zhí)行.catch話句 /Lcatch語句塊中是對(duì)異常進(jìn)行處理的代碼.每個(gè)try語句塊町以待的一個(gè) 或靠個(gè)catch諾J 用I處舛切能產(chǎn)牛的不同類中的異當(dāng)對(duì)令A(yù) catch

11、中聲明的舁就対挈(catch cSomeException e)刃裝了舁常爭 件發(fā)生的f.iXl. AcatchtfHU塊中町以位用這個(gè)対彖的 竺方法伙取這些簡 息.債如. gotMsagM )為法.的伯P 4 prlntStackTraee()方汎.川*職檸異簾孚件發(fā)生時(shí)執(zhí)行 堆棧的內(nèi)界.finally語切 finallyifi句為斤忘蛀倉促供 個(gè)統(tǒng) 的出便得任擰制流円轉(zhuǎn)到悍序的 從他郃分以前純夠?qū)Τ绦虻姆鼞B(tài)作統(tǒng) 的能坪. 九論trylh捋定的程序恢叩足舍械出依外的代礎(chǔ)邵建被執(zhí)和 購?fù)麬ftnally訥句叩可以進(jìn)行資做的悄除丄件如,I5.3異常的捕獲和處理擡獲Some后面的語句;沒右catc

12、h ( SotncExceptionl e) calch ( SomeEtcep(ion2 e ) 后面的語句;注:父類異幣的摘獲諧句不可以寫衽子類異常u獲語句的上面.catch (SomeExceptionl e)catch ( SomeException2 e)誦句”J 2;finally .XWHHW文仟例5使用try.catch語句處理界常的過程。public class Test public static void main(String args)int n=0,m=0,t=555;try m=lnteger.parselnt(8888H);n=lnteger.parselnt(

13、abc789n); t=9999; catch(NumberFormatException e) System.out.println(發(fā)生異常:R+e.getMessage();e.printStackTracef);n=123;System.out.println(nn=n+n+01m=,t+m+,t=f,+t);例5.2使用trycatch語句處理異常的過程。運(yùn)public static void main(StrinaO arg3)System.outprlntln(tf是一不異常處理的例子 S”);tryIntkiO;i/=0;catch (ArithmeticException e

14、)System.out.println(總常是:l,+e.getMessage();finallySystem.out.println(Mfinally語句被執(zhí)行冷;士x|o - XJava、世呼Jova TCI這金一個(gè)聲帝力但旳f,孑j異Z by earo八】2 漕討IK執(zhí)廳Pl1IZJ例5.3多個(gè)mtch子句的異常處理。運(yùn)行結(jié)果如 圖所示。iublicclassTC3 public static voidmain(StringO args) tryinta=args length;昇世斤“vacTC3.j4va-J11比發(fā)主了*ll例5.4使川try.catch句處理井常的過程。Publi

15、c class Testpublic static void main(String args FilelnputStream inznull;catch(FileNotFoundExceptione)( e.printStackTrace(); catch(IOException e)System.out.println(e.getMessageO);)finally try in.close(1拋出例夕卜thrown句 throw語句格式為: v 異常對(duì)象名();程序會(huì)在throw語句處立即終止, 轉(zhuǎn)向trycatch尋找異常處理方法, 不再執(zhí)行throw后面的語句。下面的例子中使用了th

16、row語句主動(dòng)拋出一個(gè)異常。例5.5 throw語句的使丿I運(yùn)行結(jié)果如圖所示。public class TC5static void throwProcess() try throw new Nu 11 Poi nterExcept ionf指針異?!?;catch (NullPointerException e) System.out.printlnHn在throwProcess方法中捕獲一 個(gè)e.getMassageO);2聲明拋棄例外-throws子句 throws用來表明一個(gè)方法中可能拋出的各種 異常,并說明該方法會(huì)拋出異常但不捕獲的 異常。如果想明確拋出一個(gè)RuntimeExcept

17、ion或 自定義異常類,就必須在方法的聲明語句中 用throws子句來表明它的類型,以便通知調(diào) 用其的方法準(zhǔn)備捕獲它。這種情況一般需要兩個(gè)方法來分別處理拋出 異常和處理異常。2聲明拋棄例夕卜throws子句 1.拋出異常的方法在拋出異常的方法中要使用throws子句,throws子 句的格式為:v 返回值類型方法名v(參數(shù))throws v異常 類型 2.主調(diào)用方法處理異常主調(diào)方法可以處理,也可以繼續(xù)拋出,讓上一級(jí)來 處理。注:重寫方法需要拋出與原方法所拋出異常類型一 致異?;虿粧伋霎惓?throw e:)publictry catcJj_I斗例5.6throwsi/i句的使用,運(yùn)行結(jié)果如圖所

18、示。Iclass TC6static void mathod() throws IHegalAccessException System.out.println(,fn在mathod中拋出一個(gè)異?!?;throw newIllegalAccessExceptionO;public static void main(String args) try mathod();x2聲明拋棄例夕卜-throws子句 Java的飯外處理 機(jī)制使得例外事件. 沼著被調(diào)用的順序往 前才找.只雯找到符 合該例外種類的例外 處理程序.rcadFMe( )method1 ( )IOF%ceptknmctbodZ ()

19、thrownIOExcepiion ()pablicmacatctSys2聲明拋棄例夕卜-throws子句public class Test public tic void nuiin (String arg*() ; catch (SoraeBxception e) print9tAck7rac();publio void metbodl()throws SonwEvcepeion(Mthod2 (); public void iMtbod2 ()throws Some Exception method? () ; public void metbd3 () throveSomKxcpexo

20、n throw nw Som /oept丄 5(SomException occur in mebodJ*:SGtneKxoepti on: SomeException ocaur xn methods at Teot imt:bod3 ): X7)at f七tMthod2 at Test.mthodl (Test java:ll) at Test HMdrHT”t 9)5 4自定義異常類自定義異常類的格式:v 自定義異常名 .說明:1通過繼承Exception類聲明自己的異常類.2.在方法適當(dāng)?shù)奈恢蒙勺远x異常的實(shí)例,并用throw語句拋出。3在方法的聲明部分用throws語句聲明該方法可

21、能拋 出的異常例5.7創(chuàng)建自定義異常。運(yùn)行結(jié)果如圖所示。class MyException extends Exception private int x;MyException(int a) x=a;public String toStringO return MyException;public class TC8 static void mathod(int a) throws MyException /青明方法會(huì)拋tfj MyExceptionSystem.out.println(ftt此處引用mathod (,+a+,t)ff); if (a10)throw new MyExcept

22、ion(a);/ 主動(dòng)拋出MyExceptio nSystem.out.println(ffIE常返回);public static void main(String args) trySm.out.printlnpn進(jìn)入監(jiān)控區(qū),執(zhí)行可能發(fā)生異常的mathod(8);mathod(20);mathod(6);可能發(fā)生異帯的程廬段Rathod It.引4一匕nathod 仝常#芒此處逍行處理費(fèi)為.MyFxeejt ion2JcatchSyste1在oneMethod()方法運(yùn)行正常的情況下,程序 段將輸出什么?public void test() try oneMethod();System.out.printlnCconditio n 1”); catch(ArraylndexOutOfBoundsException e)System.out.println(Mcondition 2M);catch(Exception e)System.out.printinfcondition 3”);I finally System.out.printlnffinally); 異常總結(jié) 3令一個(gè)圖五個(gè)關(guān)踐字先建小的.再逢大的異常別敢寫的關(guān)樂2 下面的程序有何錯(cuò)誤?public c

溫馨提示

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