檢查異常vs運行時異常
異常是一種特殊類型的事件,它可以干擾正常的程序流。exception這個名字來自“exception event”。引發異常是創建異常對象並將其交給運行時系統的過程。當運行時系統接收到異常對象時,它將嘗試在調用堆棧中找到某人來處理它,方法是按相反的順序遍歷它(方法被調用的順序)。如果運行時系統找到具有異常處理程序的方法,則該運行時系統將成功。異常處理程序是可以正式處理所述異常的代碼塊。如果運行時系統找到適當的處理程序,它將把異常對象傳遞給處理程序。這叫做捕捉異常。但是,如果無法處理異常,程序將終止。在Java中,異常繼承自Throwable類。檢查異常是編譯器強制處理的異常。運行時異常是一種異常類型,編譯器不檢查這些異常。
什麼是檢查異常?
選中的異常是類的對象之一java.lang.exception或其子類(除了java.lang.RuntimeException以及它的子類)。檢查的異常在編譯時被“檢查”。這意味著程序員必須捕捉或拋出這些異常,否則編譯會抱怨(導致編譯器錯誤)。由於這個原因,許多檢查過的異常對於程序員來說是非常熟悉的。例如,IOException及其子類都是checked異常,每當程序員處理訪問或修改文件時,編譯器都會進行檢查,以確保所有可能的IOException都由程序員處理。
什麼是運行時異常?
運行時異常包括java.lang.RuntimeException以及它的所有子類。從理論上講,它們與checked異常具有相同的用途,可以像checked異常一樣拋出或處理,但編譯器不強制執行對它們的處理。因此,運行時異常屬於未檢查異常的家族。NullPointerException、NumberFormatException、ClassCastException和ArrayIndexOutOfBoundsException是Java中常見的運行時異常。
檢查異常和運行時異常之間的區別是什麼?
雖然,檢查異常和運行時異常在程序執行期間都是不希望發生的,但它們有它們的區別。已檢查的異常處理由編譯器強制執行,但運行時異常則不是。因此,為了編譯代碼,必須拋出或處理已檢查的異常,但是對於運行時異常沒有這樣的要求。因此,運行時異常與錯誤一起屬於未檢查異常類別。