08.異常處理機制

在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");
    }
}