資源描述:
《Java--異常處理進(jìn)階.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、異常進(jìn)階一.Exception類(lèi)與RuntimeException在Java面試中經(jīng)常會(huì)詢問(wèn)Exception類(lèi)與RuntimeException的區(qū)別,如果想理解這兩個(gè)類(lèi)的區(qū)別可以看如下代碼:【字符串類(lèi)型轉(zhuǎn)化整型】publicclassRuntimeExceptionDemo01{publicstaticvoidmain(Stringargs[]){Stringstr="123";//定義字符串,全部由數(shù)字組成inttemp=Integer.parseInt(str);//將字符串變?yōu)閕nt類(lèi)型System.out.println(temp*temp);//
2、計(jì)算乘方}};從上面將字符串轉(zhuǎn)化為整型的代碼來(lái)看,Integer因?yàn)殚_(kāi)頭首字母大寫(xiě),所以肯定是一個(gè)類(lèi),而parseInt()方法可以直接由類(lèi)名稱(chēng)調(diào)用,所以此方法肯定是一個(gè)靜態(tài)方法,此方法定義如下:publicstaticintparseInt(Strings)throwsNumberFormatException;以上方法在聲明時(shí)使用了throws關(guān)鍵字,但是在方法調(diào)用時(shí)并沒(méi)用使用try,,catch進(jìn)行處理,這是為什么?因?yàn)镹umberFormatException屬于RuntimeException的子類(lèi),那么這時(shí)既可以清楚地知道以下概念:(1)Excep
3、tion在程序中必須使用try..catch進(jìn)行處理(2)RuntimeException可以不使用try..catch進(jìn)行處理,但是如果有異常產(chǎn)生,則異常將由JVM進(jìn)行處理。對(duì)于RuntimeException的子類(lèi)最好也使用異常處理機(jī)制,否則產(chǎn)生異常時(shí)會(huì)導(dǎo)致程序中斷。二.自定義異常類(lèi)在Java中已經(jīng)提供了大量的異常類(lèi),但是這些異常類(lèi)有時(shí)候難以滿足開(kāi)發(fā)者的要求,所以用戶可以根據(jù)自己的需求來(lái)定義需要的異常類(lèi)。定義異常類(lèi)只需要繼承Exception類(lèi)即可?!咀远x的異常類(lèi)】classMyExceptionextendsException{//自定義異常類(lèi),繼承E
4、xception類(lèi)publicMyException(Stringmsg){super(msg);//調(diào)用Exception類(lèi)中有一個(gè)參數(shù)的構(gòu)造方法,傳遞錯(cuò)誤信息}};publicclassDefaultException{publicstaticvoidmain(Stringargs[]){try{thrownewMyException("自定義異常。");//拋出異常}catch(Exceptione){System.out.println(e);}}}運(yùn)行結(jié)果:MyException:自定義異常;三.?dāng)嘌栽趈dk1.4之后,在Java中增加了斷言的功能。
5、斷言就是肯定某個(gè)結(jié)果的返回值是正確的,如果最終的返回結(jié)果是錯(cuò)誤的,則通過(guò)斷言檢查肯定會(huì)提示錯(cuò)誤信息。斷言:assertBoolean表達(dá)式;assertBoolean表達(dá)式:詳細(xì)的信息如果以上的boolean表達(dá)式的結(jié)果為true,則什么錯(cuò)誤信息都不會(huì)提示:如果為false,則會(huì)提示錯(cuò)誤信息;如果沒(méi)有聲明信息的描述,則系統(tǒng)會(huì)使用默認(rèn)的錯(cuò)誤信息提示方式?!臼褂脭嘌浴縫uboicclassTestAssert{publicstaticvoidmain(Stringargs[]){intx[]={1,2,3};assertx.length==0;//加入斷言,肯定是
6、錯(cuò)誤的}}以上的程序中,數(shù)組x的長(zhǎng)度是不可能為0的,所以,此處的斷言就是錯(cuò)誤的,但此時(shí)運(yùn)行程序并不會(huì)得到任何的結(jié)果,這是因?yàn)镴ava在設(shè)計(jì)次關(guān)鍵字時(shí),考慮了系統(tǒng)的應(yīng)用,為了防止某些用戶使用assert作為關(guān)鍵字,所以在程序運(yùn)行正常的情況下斷言不會(huì)起任何作用。斷言的使用:(1)雖然斷言返回的是boolean值,但是并不能將其作為條件判斷語(yǔ)句(2)斷言雖然有檢查運(yùn)行結(jié)果的結(jié)果,但是在開(kāi)發(fā)中并不提倡使用斷言