在 Java 中,所有的例外都有一個共同的祖先 Throwable(可拋出)。 Throwable 指定程式碼中可用異常傳播機制透過 Java 應用程式傳輸的任何問題的共通性。
Throwable: 有兩個重要的子類別:Exception(例外)和Error(錯誤),二者都是Java 例外處理的重要子類,各自都包含大量子類別。異常和錯誤的差別是:異常能被程式本身可以處理,錯誤是無法處理。 (建議學習:java課程)
Error(錯誤):是程式無法處理的錯誤,表示執行應用程式中較嚴重問題。大多數錯誤與程式碼編寫者執行的操作無關,而表示程式碼執行時期 JVM(Java 虛擬機)出現的問題。
例如,Java虛擬機器執行錯誤(Virtual MachineError),當 JVM 不再有繼續執行作業所需的記憶體資源時,就會出現 OutOfMemoryError。
這些例外發生時,Java虛擬機器(JVM)一般會選擇執行緒終止。這些錯誤表示故障發生於虛擬機器本身、或發生在虛擬機器試圖執行應用時,如Java虛擬機器執行錯誤(Virtual MachineError)、類別定義錯誤(NoClassDefFoundError)等。
這些錯誤是不可查的,因為它們在應用程式的控制和處理能力之 外,而且絕大多數是程式執行時不允許出現的狀況。對於設計合理的應用程式來說,即使確實發生了錯誤,本質上也不應該試圖去處理它所引起的異常狀況。在 Java中,錯誤透過Error的子類別來描述。
Exception(例外):是程式本身可以處理的例外。 Exception 類別有一個重要的子類別 RuntimeException。 RuntimeException 類別及其子類別表示「JVM 常用操作」引發的錯誤。
例如,若試圖使用空值物件參考、除數為零或陣列越界,則分別引發執行時期例外(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
Exception(異常)分兩大類:運行時異常和非運行時異常(編譯異常)。程序中應盡可能去處理這些異常。
運行時異常:都是RuntimeException類別及其子類別異常,如NullPointerException(空指標異常)、IndexOutOfBoundsException(下標越界異常)等,這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理。
這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度盡可能避免這類異常的發生。執行時期異常的特徵是Java編譯器不會檢查它,也就是說,當程式中可能出現這類異常,即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會編譯通過。
非執行時期異常 (編譯異常):是RuntimeException以外的異常,類型上都屬於Exception類別及其子類別。
從程式語法角度講是必須進行處理的異常,如果不處理,程式就不能編譯通過。如IOException、SQLException等以及使用者自訂的Exception異常,一般情況下不自訂檢查異常。
以上是java中異常與錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!