異常

一、異常的分類

Throwable是所有異常的根,java.lang.Throwable

Error是錯(cuò)誤,java.lang.Error;無法處理,線程死了,服務(wù)器宕機(jī),服務(wù)器崩潰

Exception是異常,java.lang.Exception;可以想辦法處理

二、Exception

一般分為Checked異常和Runtime異常,所有RuntimeException類及其子類的實(shí)例被稱為Runtime異常,不屬于該范疇的異常則被稱為CheckedException。

①Checked異常(編譯時(shí)異常)

只有java語言提供了Checked異常,Java認(rèn)為Checked異常都是可以被處理的異常,所以Java程序必須顯示處理Checked異常。如果程序沒有處理Checked異常,該程序在編譯時(shí)就會(huì)發(fā)生錯(cuò)誤無法編譯。這體現(xiàn)了Java的設(shè)計(jì)哲學(xué):沒有完善錯(cuò)誤處理的代碼根本沒有機(jī)會(huì)被執(zhí)行。對Checked異常處理方法有兩種

1 當(dāng)前方法知道如何處理該異常,則用try...catch塊來處理該異常。

2 當(dāng)前方法不知道如何處理,則在定義該方法是聲明拋出該異常。

我們比較熟悉的Checked異常有

Java.lang.ClassNotFoundException

Java.lang.NoSuchMetodException

java.io.IOException

②RuntimeException(運(yùn)行時(shí)異常)

Runtime如除數(shù)是0和數(shù)組下標(biāo)越界等,其產(chǎn)生頻繁,處理麻煩,若顯示申明或者捕獲將會(huì)對程序的可讀性和運(yùn)行效率影響很大。所以由系統(tǒng)自動(dòng)檢測并將它們交給缺省的異常處理程序。當(dāng)然如果你有處理要求也可以顯示捕獲它們。

我們比較熟悉的RumtimeException類的子類有

Java.lang.ArithmeticException

Java.lang.ArrayStoreExcetpion

Java.lang.ClassCastException

Java.lang.IndexOutOfBoundsException

Java.lang.NullPointerException

異常的處理原則
1.并不是try包裹的代碼越多越好,要選擇合適的代碼用try運(yùn)行

2.多個(gè)異??梢允褂枚鄬觕atch來捕獲,分別處理(注:父類異常要寫子類異常的后面)

3.異常處理的過程中可能再次產(chǎn)生一行,可以加上finally代碼塊做最后的工作(finally除System.exit(0)的情況無法運(yùn)行,若break,retrurn等都可以繼續(xù)執(zhí)行);

拓展

①必須在 try 之后添加 catch 或 finally 塊,try 塊后可同時(shí)接 catch 和 finally 塊,但至少有一個(gè)塊。

② 若代碼同時(shí)使用 catch 和 finally 塊,則必須將 catch 塊放在 try 塊之后。

③ catch 塊與相應(yīng)的異常類的類型相關(guān)。

三、Error

當(dāng)程序發(fā)生不可控的錯(cuò)誤時(shí),通常做法是通知用戶并中止程序的執(zhí)行。與異常不同的是Error及其子類的對象不應(yīng)被拋出。

Error是throwable的子類,代表編譯時(shí)間和系統(tǒng)錯(cuò)誤,用于指示合理的應(yīng)用程序不應(yīng)該試圖捕獲的嚴(yán)重問題。

Error由Java虛擬機(jī)生成并拋出,包括動(dòng)態(tài)鏈接失敗,虛擬機(jī)錯(cuò)誤等。程序?qū)ζ洳蛔鎏幚怼?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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