Java異常體系


首先,需要了解異常體系的結(jié)構(gòu):


異常體系.png

看上面的結(jié)構(gòu),Throwable是所有異常的基類,有兩個(gè)子類:Error和Exception;

  • Error:表示系統(tǒng)錯(cuò)誤或者資源耗盡,Java系統(tǒng)自己使用,應(yīng)用程序不該拋出和處理(但是是可以try catch的);
  • Exception:表示應(yīng)用程序錯(cuò)誤;

這里需要注意,圖中標(biāo)出的兩種異常類型:

  • 受檢異常(checked exception):Java強(qiáng)制要求必須在throws語句中拋出,調(diào)用者必須處理,否則無法編譯通過;
  • 未受檢查異常(unchecked exception):未做要求

try-catch-finally需要注意的地方

  • 異常被捕獲之后,try語句內(nèi)異常點(diǎn)之后的代碼就不會(huì)再執(zhí)行了,執(zhí)行完了catch內(nèi)的語句后,繼續(xù)執(zhí)行catch外的語句;
  • catch方法從上至下開始匹配,找到第一個(gè)catch塊后,后面的catch就不再會(huì)執(zhí)行了,因此,catch的順序需要從上至下為子類到父類;
  • 同一個(gè)catch可以捕獲多個(gè)異常,中間用"|"分隔;
  • catch之后,可以重新拋出異常;常用于增加一些錯(cuò)誤信息等
  • finally執(zhí)行的順序要注意:如果異常發(fā)生但是沒有被捕獲,則finally會(huì)在異常被拋給上層之前執(zhí)行;
  • catch并不是必須的,可以只有try-finally;
    關(guān)于finally和return語句:
  • try或者catch內(nèi)如果有return,則return會(huì)在finally執(zhí)行之后才會(huì)執(zhí)行,但是finally無法改變r(jià)eturn的值;(這里會(huì)將返回值暫時(shí)保存在一個(gè)臨時(shí)變量中,
    最后再返回臨時(shí)變量的值)
  • finally中有return呢?try和catch內(nèi)的return將會(huì)丟失,實(shí)際會(huì)返回finally中的return值;注意:此時(shí),不僅會(huì)覆蓋try和catch的返回值, 并且會(huì)掩蓋try和catch內(nèi)的異常,就像異常沒有發(fā)生一樣,此時(shí)異常不會(huì)再向上傳遞了;
  • finally中如果拋出異常,原異常也會(huì)被覆蓋;
  • 應(yīng)該盡量避免在finally中使用return或者拋出異常;

總之,不管有無return,finally都是會(huì)保證一定會(huì)執(zhí)行的


throws關(guān)鍵字

  • 用于聲明一個(gè)方法可能拋出的異常
  • 其調(diào)用者要不catch這個(gè)異常,或者就繼續(xù)使用throws拋出

總結(jié)

  • 當(dāng)真正出現(xiàn)異常的時(shí)候,應(yīng)該拋出異常,而不是返回特殊值;
  • 如果知道自己如何處理異常,就進(jìn)行處理;否則,就上拋;
  • 上拋時(shí),如果自己有額外信息,就應(yīng)該提供這些信息,可以以原異常為cause重新拋出;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 異常的繼承體系結(jié)構(gòu) Throwable 類是 Java 語言中所有錯(cuò)誤或異常的超類。 只有當(dāng)對(duì)象是此類(或其子...
    凱玲之戀閱讀 20,758評(píng)論 5 18
  • 八、深入理解java異常處理機(jī)制 引子try…catch…finally恐怕是大家再熟悉不過的語句了, 你的答案是...
    壹點(diǎn)零閱讀 1,730評(píng)論 0 0
  • 轉(zhuǎn)自:https://blog.csdn.net/liuhenghui5201/article/details/1...
    mayiwoaini閱讀 769評(píng)論 0 1
  • 一.異常分類 在Java中所有的異常對(duì)象都是派生于Throwable類的。Throwable下又分為Error和E...
    第四單元閱讀 1,370評(píng)論 0 6
  • 什么事也沒發(fā)生,日子平淡、簡單。在柴米油鹽中升起成就感,也許就是最近我感到有所成就的事。 清晨的煎蛋,底部微焦而蛋...
    張小花s閱讀 396評(píng)論 0 0

友情鏈接更多精彩內(nèi)容