在Java中我們可以將錯誤分為兩種
一類是Error,在Java中用Error類表示。意味著發生了JVM檢測到到的嚴重錯誤,導致JVM無法繼續執行。這種錯誤程式是不能處理的,因為程式無法捕捉到它,也就難以採用相應的處理措施。
另一類在Java中稱為異常類,表示是可以恢復的,程式能夠捕捉到,因此在程式中可以採取適當的措施進行處理。
一.Java中的異常處理機制
在Java語言中,我們將程式執行時有可能產生的錯誤稱為異常,有時也稱為例外。
Java中引入了異常和異常類,異常是異常類的物件。
Java中的異常處理機制就是:Java程式在執行中,當發生一個可以辨別的異常時,都有這個異常的異常類與之對應,併產生該異常類的一個物件,系統就會有相應的機制來處理異常。
採用異常處理機制,使得異常處理程式碼和程式中的其他部分隔開,增加程式的清晰性與可讀性。
二.Java異常處理類
Java異常類由系統庫中Exception類派生的,而Exception類由throwable類派生
Java.lang.Object
java.lang.Throwable
java.lang.Error//錯誤--作業系統保留
java.lang.Exception//異常--應用程式使用
Exception類
-
層次圖
異常型別 | 說明 |
---|---|
Exception | 異常層次結構的根類 |
RuntimeException | 執行時異常,多數 java.lang 異常的根類 |
ArithmeticException | 算術譜誤異常,如以零做除數 |
ArraylndexOutOfBoundException | 陣列大小小於或大於實際的陣列大小 |
NullPointerException | 嘗試訪問 null 物件成員,空指標異常 |
ClassNotFoundException | 不能載入所需的類 |
NumberF ormatException | 數字轉化格式異常,比如字串到 float 型數字的轉換無效 |
IOException | I/O 異常的根類 |
F ileN otF oundException | 找不到檔案 |
EOFException | 檔案結束 |
InterruptedException | 執行緒中斷 |
IllegalArgumentException | 方法接收到非法引數 |
ClassCastException | 型別轉換異常 |
SQLException | 運算元據庫異常 |
-
構造方法
public Exception();
public Exception(String s)
-
從父類Throwable繼承的常用方法
public String toString()//返回描述Exception類資訊的字串
public void printStackTrace()//
三.異常的處理
Java的異常處理有以下幾種方式:
對執行時異常可以不做處理,由Java系統檢測
用try - catch - finally 捕獲異常
用throws句子丟擲
使用者自定義異常
捕獲異常
try{
//可能產生異常的程式碼片段
}catch(異常型別 異常變數){
//異常處理
}[finally{
//不管是否發生異常總要執行的程式碼
}]
import java.io.*;
public class ExcepTest{
public static void main(String args[]){
try{
int a[] = new int[2];
System.out.println(a[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Exception thrown :" + e);
}
System.out.println("Out of the block");
}
}
丟擲異常
對於非執行時系統的異常,當定義的方法可能產生異常時,程式設計師必須丟擲可能的異常。
-
throw
throw語句用於丟擲一個異常。
異常是某個異常類的物件,當有了異常類的例項之後就可以用throw語句丟擲。
public class m1 {
public static void main(String [] args){
Student stu1 = new Student();
stu1.deposit();
}
}
class Student{
public void deposit(){
throw new ArithmeticException();
}
}
-
throws
為了指明在你定義的方法體內的某些程式碼可能會產生異常,可以在定義方法時使用throws關鍵字,並帶有該方法可能包含異常的名字。
public class m1 {
public static void main(String [] args){
Student stu1 = new Student();
stu1.deposit();
}
}
class Student{
public void deposit() throws ArrayIndexOutOfBoundsException{//陣列越界異常
int a[] = new int[2];
System.out.println(a[3]);
}
}
使用者自定義異常
對於某個程式特有的錯誤,需要程式設計人員根據程式自身邏輯在使用者程式中自己建立異常類和異常物件。
使用者定義的異常類必須是Throwable的子類,Java推薦以Exception類作為直接父類建立使用者異常類。
public class m1 {
public static void main(String [] args) throws Demo1{
throw new Demo1();
}
}
class Demo1 extends Exception{//使用者自定義異常
Demo1(){
System.out.println("Exception occured");
}
}