java异常基本知识
Throwable
??? ?|--Error
??? ?|--Exception
??? ??? ?|--RuntimeException
?? ??? ?
?? ??? ?
異常體系的特點(diǎn):異常體系中的所有類以及建立的對(duì)象都具備可拋性;
?? ??? ??? ??? ?也就是說可以被throw和throws關(guān)鍵字多操作。
?? ??? ??? ??? ?只有異常體系具備這個(gè)特點(diǎn)
?? ??? ??? ??? ?
throw和throws的用法;
?? ?throw定義在函數(shù)內(nèi),用于拋出異常對(duì)象
?? ?throws定義在函數(shù)上,用于拋出異常類,可以拋出多個(gè)用逗號(hào)隔開。
當(dāng)函數(shù)內(nèi)容有throw拋出異常對(duì)象,并未進(jìn)行try處理。必須要在函數(shù)上聲明,都在編譯失敗
注意:RuntimeException除外。也就說,函數(shù)內(nèi)如果拋出的RuntimeException異常,函數(shù)上可以不聲明。
如果函數(shù)聲明了異常,調(diào)用者需要進(jìn)行處理。處理方法可以throws可以try。
異常有兩種:
?? ?編譯時(shí)被檢測(cè)異常
?? ??? ?該異常在編譯時(shí),如果沒有處理(沒有拋出也沒有try),編譯失敗。
?? ??? ?該異常被標(biāo)識(shí),代表這可以被處理。
?? ?運(yùn)行時(shí)異常(編譯時(shí)不檢測(cè))
?? ??? ?在編譯時(shí),不需要處理,編譯器不檢查。
?? ??? ?該異常的發(fā)生,建議不處理,讓程序停止。需要對(duì)代碼進(jìn)行修正。
異常處理的語句:
try{
?? ?需要被檢查的代碼
}
catch{
?? ?處理異常的代碼
}
final{
?? ?一定會(huì)執(zhí)行的代碼
}
有三種結(jié)合格式:
try{}catch{}
try{}catch{}finally{}
try{}finally{}
注意:
?? ?1.finally中定義的通常是 關(guān)閉資源代碼。因?yàn)橘Y源代碼必須釋放
?? ?2.finally只有一種情況不會(huì)執(zhí)行,當(dāng)執(zhí)行到System.exit(0);finally不會(huì)被執(zhí)行
?? ?
自定義異常:
?? ?定義類繼承Exception或者RuntimeException
?? ?1.為了讓該自定義類具備可拋性。
?? ?2.讓該類具備澳洲異常的共性方法。
?? ?
?? ?當(dāng)要定義自定義異常的信息時(shí),可以使用父類已經(jīng)定義好的功能。
?? ?異常異常信息傳遞給父類的構(gòu)造函數(shù)。
?? ?class MyException extends Exception{
?? ??? ?MyException(String mssage){
?? ??? ??? ?super(mssage);
?? ??? ?}
?? ?}
自定義異常:按照J(rèn)ava的面向?qū)ο笏枷?#xff0c;將程序中出現(xiàn)的特有問題進(jìn)行封裝。
異常的好處:
?? ?1.將問題進(jìn)行封裝
?? ?2.將正常流程代碼和問題處理代碼相分離,方便于閱讀。
異常的處理原則:
?? ?1.處理方式有兩種:try或者throws。
?? ?2.調(diào)用到拋出異常的功能時(shí),拋出幾個(gè),就處理幾個(gè)。
?? ??? ?一個(gè)try對(duì)應(yīng)多個(gè)catch。
?? ?3.多個(gè)catch,父類的catch放到最下面。
?? ?4.catch內(nèi),需要定義針對(duì)性的處理方式,不要簡單的定義printStackTrace,輸出語句
?? ??? ?也不要不寫。
?? ??? ?當(dāng)捕獲到的異常,本功能處理不了時(shí)??梢岳^續(xù)在catch中拋出。
?? ??? ?try{
?? ??? ??? ?throw new AException();
?? ??? ?}catch(AException e){
?? ??? ??? ?throw e;
?? ??? ?}
?? ??? ?
?? ??? ?如果該異常處理不了,但不屬于該功能出現(xiàn)的異常。
?? ??? ?可以將異常轉(zhuǎn)換后,在拋出和該功能相關(guān)的異常。
?? ??? ?
?? ??? ?或者異常可以處理,當(dāng)需要將異常產(chǎn)生的和本功能相關(guān)的問題提供出去,
?? ??? ?當(dāng)調(diào)用者知道。并不處理。也可以將捕獲異常處理后,轉(zhuǎn)換新的異常。
?? ??? ?try{
?? ??? ??? ?throw new AException();
?? ??? ?}catch(AException e){
?? ??? ??? ?//對(duì)AException處理
?? ??? ??? ?throw new BException();
?? ??? ?}
?? ?
異常的注意事項(xiàng):
?? ?在子父類覆蓋時(shí):
?? ?1.子類拋出的異常必須是父類的異常的子類或者子集
?? ?2.如果父類或者接口沒有異常拋出時(shí),子類覆蓋出現(xiàn)異常,只能try不能拋。
?
轉(zhuǎn)載于:https://www.cnblogs.com/tongxuping/p/6832558.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的java异常基本知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinForm下的键盘事件(KeyPre
- 下一篇: 使用nginx+Apache负载均衡及动