Java異常機制

異常類(Exception)和錯誤類(Error)都繼承自Throwable類。

 

一、格式:

五個重要關鍵詞try,catch,finally,throw,throws

try {  
    // 可能發生異常的代碼   
} catch (異常類型1 異常對象1){  
    // 異常處理代碼
}  
catch (異常類型2 異常對象2){  
     //異常處理代碼
} 

 

try:試試某段代碼裏是否含有異常。

catch:捕獲異常。後面對應異常類型和一個代碼塊,用於表明該catch塊用於處理這種類型的代碼塊,可以有多個catch塊。

finally:總會被執行的代碼。主要用於回收在try塊裏打開的物力資源(如數據庫連接、網絡連接和磁盤文件)。只有finally塊,執行完成之後,纔會回來執行try或者catch塊中的return或者throw語句,如果finally中使用了return或者throw等終止方法的語句,則就不會跳回執行,直接停止。

throw:用於拋出一個實際的異常,可以單獨作爲語句使用,拋出一個具體的異常對象。

throws:用在方法簽名中,用於聲明該方法可能拋出的異常。

二、拋出異常:

1.throws拋出異常:

如果我們定義的一個方法可能會出現異常,但沒有能力去處理這個異常,這時我們可以用throws拋出異常,交給這個方法的調用者去處理(當然如果調用者也不想處理,也可以繼續拋出,最終JVM會處理)。比如:汽車在運行時可能出現異常,但汽車沒有自己處理的能力,它就會把異常拋給開車的人處理(方法調用者)。

public class TestException {  
    static void pop() throws NegativeArraySizeException {  
        // 定義方法並拋出NegativeArraySizeException異常   
        int[] arr = new int[-3]; // 創建數組   
    }  
  
    public static void main(String[] args) { // 主方法   
        try { // try語句處理異常信息   
            pop(); // 調用pop()方法   
        } catch (NegativeArraySizeException e) {  
            System.out.println("pop()方法拋出的異常");// 輸出異常信息   
        }  
    }  
  
}  

定義方法pop()時預測到可能會出現NegativeArraySizeException類型的異常,但它假如無力處理異常,所以就把異常拋出,誰調用它誰就處理這個異常。

2.throw拋出異常對象:

throw拋出的是一個具體的異常對象,程序在執行了throw之後會立即跳出語句所在的方法,因此throw後面不允許有別的語句,否則程序會在編譯時出錯。

 

三、常見異常:
 1. runtimeException子類:

    1、 java.lang.ArrayIndexOutOfBoundsException
    數組索引越界異常。當對數組的索引值爲負數或大於等於數組大小時拋出。
    2、java.lang.ArithmeticException
    算術條件異常。譬如:整數除零等。
    3、java.lang.NullPointerException
    空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的屬性、計算null對象的長度、使用throw語句拋出null等等
    4、java.lang.ClassNotFoundException
    找不到類異常。當應用試圖根據字符串形式的類名構造類,而在遍歷CLASSPAH之後找不到對應名稱的class文件時,拋出該異常。

   5、java.lang.NegativeArraySizeException  數組長度爲負異常

   6、java.lang.ArrayStoreException 數組中包含不兼容的值拋出的異常

   7、java.lang.SecurityException 安全性異常

   8、java.lang.IllegalArgumentException 非法參數異常

2.IOException

IOException:操作輸入流和輸出流時可能出現的異常。

EOFException   文件已結束異常

FileNotFoundException   文件未找到異常

3. 其他

ClassCastException    類型轉換異常類

ArrayStoreException  數組中包含不兼容的值拋出的異常

SQLException   操作數據庫異常類

NoSuchFieldException   字段未找到異常

NoSuchMethodException   方法未找到拋出的異常

NumberFormatException    字符串轉換爲數字拋出的異常

StringIndexOutOfBoundsException 字符串索引超出範圍拋出的異常

IllegalAccessException  不允許訪問某類異常

InstantiationException  當應用程序試圖使用Class類中的newInstance()方法創建一個類的實例,而指定的類對象無法被實例化時,拋出該異常


 

四、異常對象包含的常用方法:

1.       getMessage();返回該異常的詳細描述字符

2.       printStackTrace():將該異常的跟蹤棧信息輸出到標準錯誤輸出。

3.       printStackTrace(PrintStream s):將該異常的跟蹤棧信息輸出到指定的輸出流

4.       getStackTrace():返回該異常的跟蹤棧信息。

 五、自定義異常:

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章