異常類(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():返回該異常的跟蹤棧信息。
五、自定義異常: