在 Java 中,所有的異常都有一個共同的祖先java.lang包中的 Throwable類。
Throwable: 有兩個重要的子類:Exception(異常) 和 Error(錯誤) ;二者都是 Java 異常處理的重要子類,各自都包含大量子類。
Error(錯誤):是程序無法處理的錯誤,表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,Java虛擬機運行錯誤(Virtual MachineError),當JVM 不再有繼續執行操作所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)一般會選擇線程終止。這些錯誤表示故障發生於虛擬機自身.或者發生在虛擬機試圖執行應用時,如Java虛擬機運行錯誤(Virtual MachineError).類定義錯誤(NoClassDefFoundError)等。這些錯誤是不可查的,因為它們在應用程序的控制和處理能力之 外,而且絕大多數是程序運行時不允許出現的狀況。對於設計合理的應用程序來說,即使確實發生了錯誤,本質上也不應該試圖去處理它所引起的異常狀況。在 Java中,錯誤通過Error的子類描述。
Exception(異常):是程序本身可以處理的異常。Exception 類有一個重要的子類RuntimeException。
下面分別介紹一下常見的異常:
NullPointerException:要訪問的變量沒有引用任何對象時,拋出該 異常。
ArithmeticException:算術運算異常,一個整數除以0時,拋出該異常。
ArrayIndexOutOfBoundsException:數組下標越界異常,調用索引值超出被調用數組索引界限,拋出該異常。
FileNotFoundException:文件未找到異常,系統找不到指定的路徑或訪問不到指定的文件,拋出該異常。
MissingResourceException:資源綁定異常,資源不存在或路徑不對導致系統未識別到綁定資源,拋出該異常。
ClassNotFoundException:無法找到指定的類異常,當系統沒有找到具有指定名稱的類時,拋出該異常。
IllegAlargumentException:非法參數異常,當傳入的參數違反了一個方法要求的某些特性時,拋出該異常。
IOException:IO異常,發生在IO流傳輸的途中。
NumberFormatException:字符串轉換為數字異常,當字符串不完全是數字類型時作轉化,拋出該異常。
SQLException:操作數據庫異常。
ClassCastException:類型轉化異常。
異常和錯誤的區別:異常能被程序本身可以處理,錯誤是無法處理。
異常處理:
try 塊:用於捕獲異常。其后可接零個或多個catch塊,如果沒有catch塊,則必須跟一個fifinally塊。
catch 塊:用於處理try捕獲到的異常。
finally 塊:無論是否捕獲或處理異常,finally塊里的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。