Java異常

基類 Throwable

兩個(gè)子類 Exception(異常) 和 Error(錯(cuò)誤)

兩者區(qū)別:異常程序本身可以處理,錯(cuò)誤無(wú)法處理

Exception兩大類

運(yùn)行時(shí)異常:RuntimeException及其子類異常。一般由程序邏輯錯(cuò)誤引起。

Java運(yùn)行時(shí)系統(tǒng)自動(dòng)拋出,允許應(yīng)用程序忽略運(yùn)行異常。

非運(yùn)行時(shí)異常:RuntimeException以外的異常。語(yǔ)法角度是必須進(jìn)行處理的異常。


Java異常分類

可查異常:非運(yùn)行時(shí)異常

正確的程序運(yùn)行中容易出現(xiàn)的,情理可容的異常狀況。

特點(diǎn):Java編譯器會(huì)檢查它,必須用try-catch捕獲或throws聲明

不可查異常:運(yùn)行時(shí)異常和錯(cuò)誤

編譯器不要求強(qiáng)制處理


Java處理異常機(jī)制

異??偸窍缺粧伋觯蟊徊蹲?/p>

拋出異常:當(dāng)一個(gè)方法出現(xiàn)錯(cuò)誤引發(fā)異常時(shí),方法創(chuàng)建對(duì)象并交付運(yùn)行時(shí)系統(tǒng)。

異常對(duì)象中包含了異常類型和異常出現(xiàn)時(shí)的程序狀態(tài)等異常信息。運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。

throws 一個(gè)方法可能出現(xiàn)異常,無(wú)能力處理,可在方法聲明處用throws子句來(lái)聲明

多個(gè)異常用逗號(hào)分隔method() throws Exception1,Exception2,Exception3…

僅當(dāng)拋出了異常,該方法的調(diào)用者才必須處理或重新拋出該異常。當(dāng)方法調(diào)用者無(wú)力處理該異常時(shí),應(yīng)當(dāng)繼續(xù)拋出。

throw 總是出現(xiàn)在函數(shù)體中,用來(lái)拋出一個(gè)Throwable型的異常。

程序會(huì)在throw語(yǔ)句后立即終止,后在包含它的所有try塊中從里向外尋找含有與其匹配的catch子句的try塊。

如果拋出了檢查異常,還應(yīng)在方法頭部聲明聲明方法可能拋出的異常類型。方法調(diào)用者也必須檢查處理拋出的異常。


若所有方法都層層上拋異常,最終jvm會(huì)處理。

捕獲異常:在方法拋出異常之后,運(yùn)行時(shí)系統(tǒng)轉(zhuǎn)為尋找合適的異常處理器。

潛在的異常處理器是異常發(fā)生時(shí)依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器所能處理的異常類型與拋出的異常類型相符時(shí),即為合適的異常處理器。

運(yùn)行時(shí)系統(tǒng)從發(fā)生異常的方法開(kāi)始,依次回查調(diào)用棧中的方法,若找到合適異常處理器則執(zhí)行,否則運(yùn)行時(shí)系統(tǒng)終止。Java程序終止。

try-catch-finally

捕獲try塊內(nèi)運(yùn)行語(yǔ)句的異常

若無(wú)異常,try塊內(nèi)語(yǔ)句逐一執(zhí)行,跳過(guò)catch語(yǔ)句塊,執(zhí)行finally語(yǔ)句塊和其后的語(yǔ)句

若有異常,catch語(yǔ)句塊無(wú)處理此異常的情況,此異常將拋給JVM處理,finally語(yǔ)句塊里的語(yǔ)句仍會(huì)被執(zhí)行,但finally語(yǔ)句塊后語(yǔ)句不執(zhí)行 catch語(yǔ)句塊有處理此異常的情況,則跳到該catch語(yǔ)句塊執(zhí)行,其余catch塊不執(zhí)行,完畢后執(zhí)行finally語(yǔ)句塊

注意:

try或catch塊中遇到return語(yǔ)句也會(huì)執(zhí)行finally

對(duì)catch塊的檢查是順聲明順序依次檢查,若有某個(gè)子類異常需要處理,應(yīng)放在父類異常之前

finally不執(zhí)行情況:

JVM過(guò)早終止(調(diào)用System.exit())

finally塊中拋出一個(gè)未處理的異常

程序所在線程死亡

關(guān)閉CPU


自定義異常

繼承Exception類

調(diào)用方法與系統(tǒng)一致

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 通俗編程——白話JAVA異常機(jī)制 - 代碼之道,編程之法 - 博客頻道 - CSDN.NEThttp://blog...
    葡萄喃喃囈語(yǔ)閱讀 3,337評(píng)論 0 25
  • 異常處理機(jī)制 異常處理模型:終止模型:當(dāng)異常發(fā)生時(shí),就進(jìn)入異常處理程序,處理結(jié)束并不返回異常發(fā)生位置繼續(xù)執(zhí)行;恢復(fù)...
    LilacZiyun閱讀 523評(píng)論 0 2
  • 初識(shí)異常(Exception) 比如我們?cè)谌?shù)組里面的某個(gè)值得時(shí)候,經(jīng)常會(huì)出現(xiàn)定義的取值范圍超過(guò)了數(shù)組的大小,那么...
    iDaniel閱讀 1,982評(píng)論 1 2
  • 概念介紹 異常是發(fā)生在程序執(zhí)行過(guò)程中阻礙程序正常執(zhí)行的錯(cuò)誤事件,當(dāng)一個(gè)程序出現(xiàn)錯(cuò)誤時(shí),可能的情況有如下3種: 語(yǔ)法...
    niaoge2016閱讀 5,653評(píng)論 2 20
  • Java異常類型 所有異常類型都是Throwable的子類,Throwable把異常分成兩個(gè)不同分支的子類Erro...
    予別她閱讀 1,041評(píng)論 0 2

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