一般,Java的異常(包括Exception和Error)分爲檢查異常(checked exceptions)和非檢查的異常(unchecked exceptions)。
其中根據Exception異常進行劃分,可分爲運行時異常和非運行時異常。java
What:什麼是檢查異常(checked exception)?編程
就是編譯器要求你必須處置的異常。不知道你編程的時候有沒有遇到過,你寫的某段代碼,編譯器要求你必需要對這段代碼try...catch,或者throws exception,若是你碰見過,沒錯,這就是檢查異常,也就是說,你代碼還沒運行呢,編譯器就會檢查你的代碼,會不會出現異常,要求你對可能出現的異常必須作出相應的處理。
How:怎樣處理檢查異常(checked exception)?.net
一、繼續拋出,消極的方法,一直能夠拋到java虛擬機來處理,就是經過throws exception拋出。
二、用try...catch捕獲
注意,對於檢查的異常必須處理,或者必須捕獲或者必須拋出
Where:檢查異常有哪些呢?指針
除了RuntimeException與其子類,以及錯誤(Error),其餘的都是檢查異常(絕對的你們族)。blog
What:什麼是非檢查異常(unchecked exceptions)?get
編譯器不要求強制處置的異常,雖然你有可能出現錯誤,可是我不會在編譯的時候檢查,不必,也不可能。
How:對未檢查的異常(unchecked exception )怎樣處理?編譯器
一、捕獲
二、繼續拋出
三、不處理虛擬機
通常咱們是不處理的,由於你很難判斷會出什麼問題,並且有些異常你也沒法運行時處理,好比空指針,須要人手動的去查找。並且,捕捉異常並處理的代價遠遠大於直接拋出。io
Why:爲何有非檢查異常?編譯
你想一想非檢查異常都有哪些?NullPointerException,IndexOutOfBoundsException,VirtualMachineError等,這些異常你編譯的時候檢查嗎?再說了,明明能夠運行時檢查,都在編譯的時候檢查,你寫的代碼還能看嗎?並且有些異常只能在運行時才能檢查出來,好比空指針,堆溢出等。
Where:非檢查異常有哪些?
RuntimeException與其子類,以及錯誤(Error)。
Exception異常進行劃分,它可分爲運行時異常和非運行時異常。
What:什麼是運行時異常?
都是RuntimeException類及其子類異常,如NullPointerException(空指針異常)、IndexOutOfBoundsException(下標越界異常)等,這些異常是非檢查異常,程序中能夠選擇捕獲處理,也能夠不處理。這些異常通常是由程序邏輯錯誤引發的,程序應該從邏輯角度儘量避免這類異常的發生。
運行時異常的特色是Java編譯器不會檢查它,也就是說,當程序中可能出現這類異常,即便沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會編譯經過。
What:什麼是非運行時異常?
是RuntimeException之外的異常,類型上都屬於Exception類及其子類。從程序語法角度講是必須進行處理的異常,若是不處理,程序就不能編譯經過。如IOException、SQLException等以及用戶自定義的Exception異常,通常狀況下不要自定義檢查異常。
原文連接:https://blog.csdn.net/weixin_39220472/article/details/81056647