天天看點

[Java 進階]異常捕獲異常自定義異常抛出異常異常的類型

異常:程式在運作過程中發生由于硬體裝置問題、軟體設計錯誤等導緻的程式異常事件。

世上沒有百分之百完美的程式。程式總難免存在各式各樣的問題。是以,程式中添加對于錯誤的處理機制是十分有必要的。這就好比人多的公共場所需要有防火防盜的安保系統一個道理。

<a></a>

try {

    // 有可能出現異常的語句

} catch (Type1 e1) {

    // 異常類型1處理代碼

} catch (Type2 e2) {

    // 異常類型2處理代碼

// etc...

catch (TypeN en) {

    // 異常類型n處理代碼

} finally {

    // 不管有沒有發生異常,finally語句塊都會被執行

    // 在 try...catch 異常處理機制中, finally關鍵字是可選的

}

try 關鍵字之後的程式塊就是異常的監控區域。

多個 catch 關鍵字後面的程式塊,則是針對每個要捕獲的異常,所準備的相應處理程式。

finally 關鍵字之後的程式塊,無論是否出現異常,總會被執行。 finally 關鍵字在 try...catch 機制中并不是必須的。

 範例代碼

JAVA雖然提供了大量的異常類,但也不可能預見所有的異常情況。是以可以自己定義異常類來表示程式可能會遇到的特定問題。

要自定義異常類,必須從已有的異常類繼承,最好選擇功能相近的異常類繼承。

// 自定義異常類,繼承Exception類

class MyException extends Exception {

    public MyException(String msg) {

        super(msg); // 調用Exception類中有一個參數的構造方法,傳遞錯誤資訊

    }

};

public class DefaultException {

    public static void main(String args[]) {

        try {

            throw new MyException("自定義異常。"); // 抛出異常

        } catch (Exception e) {

            e.printStackTrace();

        }

    } /* Output:

MyException: 自定義異常。

    at DefaultException.main(DefaultException.java:11)

    */

在定義一個方法時可以使用 throws 關鍵字聲明,使用 throws 聲明的方法表示此方法不處理異常,而交給方法的調用處進行處理。

public 傳回值類型 方法名稱(參數清單...) throws  異常類{}

需要注意的是,如果異常類類型不是運作時異常類型,那麼在調用這個方法時,不管是否有問題,都必須使用 try...catch 進行異常的捕獲與處理。

和 throws 不同,throw 關鍵字表示主動地抛出一個異常,抛出時直接抛出異常類的執行個體化對象即可。

JAVA中所有的異常類都繼承自 Throwable 類。

異常可分為兩大類:Exception 和 Error。

Exception:一般指的是程式中出現的問題,可以通過 try...catch 處理。

Error:一般指的是JVM錯誤,程式無法處理。

Exception還可以再繼續細分為運作時異常(RuntimeException)和非運作時異常。

運作時異常可以不使用 try...catch 進行處理。

非運作時異常必須使用 try...catch 進行處理。

請看以下代碼:

public class RuntimeExceptionDemo01 {

        int result = 0;

        String str = "10";

        String str2 = "abc";

        result = Integer.parseInt(str); // 将字元串中的數字轉為int類型

        System.out.println(result * result);

        result = Integer.parseInt(str2); // 試圖将字元串中字母轉為int類型時會出現異常

執行以上代碼時,再第二次調用Integer.parseIn()時會出現異常。我們看一下這個方法的定義:

public static int parseInt(String s) throws NumberFormatException

這裡使用了 throws 關鍵字,但是在實際調用時并沒有使用 try...catch,編譯器也沒有報錯。

這是因為所有繼承自 RuntimeException 的類都可以不使用 try...catch 進行處理。在這種情況下,如果産生異常,将由 JVM 進行處理,此時肯定會中斷程式。

是以,如果想要程式在出錯時仍可以繼續執行,最好還是使用 try...catch 的異常處理機制來處理。

 本文轉自靜默虛空部落格園部落格,原文連結:http://www.cnblogs.com/jingmoxukong/p/4288249.html,如需轉載請自行聯系原作者