異常與錯誤
程序運行時必然會發生意外行為。這可能是由於異常或錯誤造成的。異常是可以干擾正常程序流的事件。錯誤是可以認為是不可恢復的情況。異常主要與應用程序本身有關,而錯誤則與運行程序的系統有關。
什麼是例外?
異常是一個可以干擾正常程序流的事件。exception這個名字來自“exception event”。引發異常是創建異常對象並將其交給運行時系統的過程。異常對象是由發生異常的方法創建的。異常對象包含有用的信息,例如異常的類型和描述。當運行時系統接收到異常對象時,它將嘗試在調用堆棧中找到某人來處理它,方法是按相反的順序遍歷它(方法被調用的順序)。調用堆棧是在發生異常的方法之前調用的方法的有序列表。如果運行時系統找到具有異常處理程序的方法,則該運行時系統將成功。異常處理程序是可以正式處理所述異常的代碼塊。如果運行時系統找到適當的處理程序(即異常類型與可以處理的類型匹配),它將把異常對象傳遞給處理程序。這叫做捕捉異常。但是,如果無法處理異常,程序將終止。在Java中,異常繼承自“Throwable class”。NullPointerException和ArrayIndexOutOfBoundsException是Java中兩個常見的異常。
什麼是錯誤?
錯誤是一種可以被認為是不可恢復的情況,例如程序需要比可用內存更大的內存量。這些錯誤無法在運行時處理。如果發生錯誤,程序將終止。在Java中,錯誤繼承自Throwable類。錯誤通常代表程序員(或應用程序)不應試圖捕捉的嚴重問題。錯誤僅僅是不正常的情況,在正常情況下是不可能發生的,因此是無法預見的。例如,OutOfMemoryError、stackoverflowerrror和ThreadDead就是這樣的錯誤。方法永遠不應該有錯誤處理程序。
異常和錯誤的區別是什麼?