異常:程式在運作過程中發生由于硬體裝置問題、軟體設計錯誤等導緻的程式異常事件。
世上沒有百分之百完美的程式。程式總難免存在各式各樣的問題。是以,程式中添加對于錯誤的處理機制是十分有必要的。這就好比人多的公共場所需要有防火防盜的安保系統一個道理。
<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,如需轉載請自行聯系原作者