Java語言基礎教程(張化祥):第七章異常處理(精)_第1頁
Java語言基礎教程(張化祥):第七章異常處理(精)_第2頁
免費預覽已結(jié)束,剩余15頁可下載查看

下載本文檔

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

文檔簡介

1、甲第7章異常處理異常是指程序在運行時發(fā)生的錯誤.通過卩片處理機制.我們町以用一 種結(jié)構(gòu)化的町控方式來處理運行時地錯誤盡管大多數(shù)高級程序設計語言都 提供了 -些斤A處理機制.但Java中的異常處理機制I匕JI它語言提供的 簡沽、更靈活。在Java中.所有的異常都用類來衣示。所有的異常類都是從java.langtl中的Throwable繼承Hu來的。Error和Except ion1. ErrorError用來以示編譯和運行錯誤如程履進入死循環(huán)、內(nèi)存溢出竽.Error只能在編譯階段解決.運行時棉序本身無法解決.只能依輅比它程序的F預.否則會 點處p非正常狀態(tài)Error處理一般由系統(tǒng)承拒,Java木

2、十仆 提供相應的Error處理機制。2. ExceptionException川來左小由心序沾動所導致的鉆泯,如運毎時除數(shù)為0、打幵 個文件時發(fā)規(guī)文件不/ 小 X 細F運彳j山現(xiàn)Exception時 程庁;屮加 入H滋處理化仍可檢程序繼續(xù)運行和金和Y結(jié)束。異常處理機制正是 針對Exception的Throwab 1 e的方法Throwable中足義多個方法。因為所有的丹常啖都足Th rowable的子類. 所以它們都繼承了Throwable的這空方法Throwable filllnStackTraceO:返冋個包含調(diào)用找息的Throwable對 g 該對彖可以被IE新拋出。void print

3、StackTrace():將調(diào)用棧信息輸出到標準錯謀。String geiMessage():返回對杲常的描述。String getLocalizedMessage。;返冋對界常的木地描述。String toString():返冋 個包含丹常摘述的String對彖。右異常的產(chǎn)生Java中的并常處理機制看似十分的縈瑣.實際使用時卻并不復雜。卜面 介紹個簡饑的卑本異常:dass Throwl(public static void main(String args) int a-new int4J;System.out.println(Befbre exception1*);a8-12;/T 個數(shù)紐

4、卜標越界界常Systemout.printlnCAfter exception!);輸出結(jié)果:Followed by exception!Exception in thread main java.Iang.ArraylndexOutOfBoundsException: 8 atThrowl.main(Throwl.java:5)上例中產(chǎn)牛了一個數(shù)紐卜標越界亓常.它足RuntimeExceptionfi catch(ArTayIndexOutOfBoundsExcepbon e)System.out.printinCArraylndexOutOfBoundsExcepbon caught!1)

5、; catch(ArithmeticException e)System.out.printin(nArithmeticExceptio n caught!);System.out.printin(HEnd up!);輸出結(jié)果:Before excepbon!ArrayIndexOutOfBoundsException caught!End up!運行結(jié)果中對以看出上例try塊中產(chǎn)牛了一個數(shù)組卜標越界開常.這個 異常對獄被第 個catch語句捕獲并處理.第二個catch語句則被M接跳過. 緊接若執(zhí)行了catch語句后而的輸出語句。class Trylpublic static void mai

6、n(Stnng argsX如果try塊中沒仃拋出丹常.那么try塊就會全部執(zhí)行結(jié)束.丿門I.會跳過 它的所有catch語句.從最后個catch后血的第個語句繼續(xù)執(zhí)行.例如:dass Try2public static void main(String args)int a-new int4);trya0=12;System.out.pnntin( No!M);catch(ArrayIndexOutOfBoundsException e)System.out.prinHn(ArrayIndexOutOfBoundsEx8ption caught!*); System.out.println(nE

7、nd upP);輸出結(jié)果:Will exception be gen erated?No!End up!try代碼塊中對能會拋出個或多個杲常.我們要針對每個町能發(fā)牛的杲 常,準備相應的異常處理程序.例如dass Try3pubic static void main(String args)int a-6/7rl6/25/43/48/55f76;int b-3f0A5r0f8;fbr(int i=0;ia.length;i*4-)吹System.out.println(ai+T4-bi4-,is,+ai/bi);catch(ArithmeticExcepbon e) System-outprin

8、ti1Cant divide by zero!*1);catch(ArTayIndexOutOfBound$Exceptione)System.out.pnntlnCNomatching element fbundr,);輸出結(jié)果:6/3 is 2Cant divide by zero!16/4 is 425/5 is 5Cant divide by zero!48/8 is 6No matching element found! No matching element found!捕獲所有異常X 拋出丹常的時候,Java會從上向卜分別對毎個catch句處理的井常類 烈進行檢測.然后按照代碼的

9、書寫順序找出“昴近”的處理程序。 找到匹配 的處理糧序Z丿二 它便認為畀常將得到處理,然后就不在繼續(xù)件找。含找的 時候并彳、嚶求拋出的片常同處理程序所0名的并常完全匹配。派生類的対彖 也町以匹配其卑類的處理稈序。例如:dass Try4pubic static void main(String args) int a-6/7rl6z25/43/48/55f76; intb 3O4,5O8; fbr(inti=O;in e)System.out.printlnCArithmeticException caughtP); System.out.printlnCEnd up!);輸出結(jié)果:Befor

10、e throw!ArithmeticExcepbon caught! End up!由catch語句捕獲的異常町以重新拋出以使外部catch語句町以捕獲它。呎新拋出的1:要原因尼為了允許多個斤常處理卅序訪問丹常。匝拋葉常會把 片滋拋給上一級環(huán)境中的界常處理程丿乩 高一級環(huán)境中捕獲此片桔的處刃R序町以從這個異常對篆中得到所有信息。dass UseRethrow public static void t() try System.ouLpnntin(Bofore excepbon!*); throw newAnthmeticException(); catch(ArithmeticExceptio

11、n e)System.out.pnntin(An th me tic Exception caught!”); throw e;重新拋出異常dass RethrowDemo public static void main(String args) tryUseRethrow.t();catch(AnthmeticExceptione) System.out.pnndn(Caught agai n!”);輸出結(jié)果:Before exception!ArithmeticException caught!Caught again!ArraylndexOutOfBoundsExceptionTl:方法

12、t()屮被匝新拋出 乂存main()中被再次捕獲。finally對丁一些代碼,町能會希筆無論try塊中的界常是否被拋出,它們都能得 到執(zhí)行為了在退出try/catch代碼塊時指足-個嚶執(zhí)行的代碼塊,町以在井 常處理用序后而加1 finallyfhj包Afinally的try/catch的展木形式如卜所示:try 可能產(chǎn)牛片常的代碼 catch (Typel e) /對汗常類Wypel的丹常處理代何Finally/ iUllitry/catch代碼塊兀冬執(zhí)仃的代碼class Usefnally2 plk static gd t() Gt aLJ=new nt4; try System x) )u

13、t.prntln(*Caught aganf);輸出結(jié)果:Before excepbon!ArrayIndexOutOfBoundsException caught!In finally clause!Caught again!上例中內(nèi)層 B 塊拋出了界常,亦l(xiāng)ly塊中的語句得到了執(zhí)彳亍。再將程序修 改一下。將程序屮的這一行F8“0;改為 7“0八 此時沒仃界常拋出, 運行結(jié)果如卜:Before exception! In finally clause!可見無論是出F何種原因,只耍離開try/cateh代碼塊,就會執(zhí)行finally代 碼塊。System.out.printinCBefore

14、exceptton!*);8-10;throw e;otd mabi(String args)異常說明在菜嘆情況卜,如果個方法產(chǎn)牛白己不處理的并常它就必須在throws子句中聲名該異常.這就是亓常說嘰 它屬于方法聲名的一部分緊 跟住形式參數(shù)列衣Z后。包金throws/句的力法的叢木形式如卜:retumType methodname(/*angument list*/)throwsexceptionList /method body此處.exceptionList足 個方法對能會拋出的斤常的列衣,乞個界常Z間用逗號隔開。凡是RuntimeException及H子類的斥常都不必在列衣中折定。 它們

15、被稱 為U砂檢查的并?!監(jiān) H它類型斤常的處理都是山編譯器強制實施的。這 種杲常被稱為“被檢査的異常Odass Throws Demo public stabc void t() throws ExceptionSystem.out.printin(MBefore throw!);throw new Excepbon(); public static void main(String args)catch(Excepton e)System.out.printinC Exception caught!);輸出結(jié)果:Before throw!Exception caught!盡nJava的內(nèi)輕丹常處理大筍數(shù)常見的錯誤,但足Java的并常處理機制并不局限于處理這陀鉗頭 我們可以自己足義異常類*衣示程序中可能會 遇到的特定問題創(chuàng)建個岸常類很容易,只需定義個Exception的子 即町。建工新的并常類熨最簡單的力法就是讓編譯器為你產(chǎn)生缺省構(gòu)造器,所以這兒乎不用養(yǎng)名少代碼.還町以進一步自疋義界常比如町以為界常類 定義個接愛字符串翁數(shù)的構(gòu)造器。例如:dass My Exception 1 extends Exception public dass DefExcepbonlpublic

溫馨提示

  • 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

提交評論