通俗理解checked Exception和unchecked Exception
首先放一張Java異常層次結(jié)構(gòu)圖:
錯誤(Error)和異常(Exception)是不同的。
Error(錯誤):是程序無法處理的錯誤,表示運行應(yīng)用程序中較嚴重問題。大多數(shù)錯誤與代碼編寫者執(zhí)行的操作無關(guān),而表示代碼運行時JVM(Java虛擬機)出現(xiàn)的問題。例如,Java虛擬機運行錯誤(Virtual MachineError),當JVM不再有繼續(xù)執(zhí)行操作所需要的內(nèi)存資源時,將出現(xiàn)OutOfMemoryError。這些異常發(fā)生時,Java虛擬機(JVM)一般會選擇線程終止。
Exception(異常):是程序本身可以處理的異常。
Exception可以分為checked exceptions和unchecked exceptions :
1.unchecked exceptions(運行時異常),都是RuntimeException類及其子類異常,就是我們在開發(fā)中測試功能時程序終止,控制臺出現(xiàn)的異常,比如:
NullPointerException(空指針異常)
IndexOutOfBoundsException(下標越界異常)
ClassCastException(類轉(zhuǎn)換異常)
ArrayStoreException(數(shù)據(jù)存儲異常,操作數(shù)組時類型不一致)
IO操作的BufferOverflowException異常
2.checked exceptions,非運行時異常(編譯異常):是RuntimeException以外的異常,類型上都屬于Exception類及其子類。從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義unchecked異常。通俗的話說,就是在寫代碼時出現(xiàn)紅線,需要try catch或者throws時出現(xiàn)的異常。
異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
error表示恢復(fù)不是不可能但很困難的情況下的一種嚴重問題。 比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。exception表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運行正常,從不會發(fā)生的情況。
異常是指java程序運行時(非編譯)所發(fā)生的非正常情況或錯誤,與現(xiàn)實生活中的事件很相似,現(xiàn)實生活中的事件可以包含事件發(fā)生的時間、地點、人物、情節(jié)等信息,可以用一個對象來表示,Java使用面向?qū)ο蟮姆绞絹硖幚懋惓?#xff0c;它把程序中發(fā)生的每個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。
Java對異常進行了分類,不同類型的異常分別用不同的Java類來表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception,Error表示應(yīng)用程序本身無法克服和恢復(fù)的一種嚴重問題,程序只有死的份了,例如,說內(nèi)存溢出和線程死鎖等系統(tǒng)問題。Exception表示程序表示程序還能夠克服和恢復(fù)的一種嚴重問題,其中又分為系統(tǒng)異常和普通異常,系統(tǒng)異常是軟件本身缺陷所導(dǎo)致的問題,也就是軟件開發(fā)人員考慮不周所導(dǎo)致的問題,軟件使用者無法克服和恢復(fù)這種問題,但在這種問題下還可以讓軟件系統(tǒng)繼續(xù)運行或者讓軟件死掉,例如,數(shù)組腳本越界(ArrayIndexOutOfBoundsException)、空指針異常(NullPointerException)、類轉(zhuǎn)換異常(ClassCastException);普通異常是運行環(huán)境的變化或異常所導(dǎo)致的問題,是用戶能夠克服的問題,例如,網(wǎng)絡(luò)斷線,硬盤空間不夠,發(fā)生這樣的異常后,程序不應(yīng)該死掉。
java為系統(tǒng)異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須try···catch處理或用throws聲明繼續(xù)拋給上層調(diào)用方法處理,所以普通異常也稱為checked異常,而系統(tǒng)異常可以處理也可以不處理,所以,編譯器不強制用try…catch處理或用throws聲明,所以系統(tǒng)異常也稱為unchecked異常。
總結(jié)
以上是生活随笔為你收集整理的通俗理解checked Exception和unchecked Exception的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个write和printf混用的例子
- 下一篇: ICS大作业——程序人生 Hello‘s