程序中總是存在着各種問題,爲了使在程序執行過程中能正常運行,使用Java提供的異常處理機制捕獲可能發生的異常,對異常進行處理並使程序能正常運行。這就是Java的異常處理。
一、可捕獲的異常
Java中可以捕獲的異常分爲可控式和運行時異常。
1. 可控式異常
在Java中把那些可以預知的錯誤,在程序編譯時就能對程序中可能存在的錯誤進行處理,並給出具體的錯誤信息,這些錯誤稱爲可控式異常。常用的可控式異常如下:
異常 | 說明 |
IOException | 當發生某種I/O異常時,拋出此異常 |
SQLException | 提供關於數據庫訪問錯誤或其他錯誤信息的異常 |
ClassNotFoundException | 類沒有找到異常 |
NoSuchFieldException | 類不包含指定名稱的字段時產生的信號 |
NoSuchMethodException | 無法找到某一特定方法時,拋出該異常 |
2. 運行時異常
在Java中不能被編譯器檢測到的錯誤稱爲運行時異常。常用的運行時異常如下:
異常 | 說明 |
IndexOutOfBoundsException | 指示某集合或數組的索引值超出範圍時拋出該異常 |
NullPointerException | 當應用程序試圖在需要對象的地方使用null時,拋出該異常 |
ArithmeticException | 當出現異常的運算條件時,拋出此異常 |
IllegalArgumentException | 拋出異常的表明向方法傳遞了一個不合法或不正確的的參數 |
ClassCastException | 當試圖將對象強制轉換爲不是實例的子類時,拋出該異常 |
二、處理異常
在Java中當程序出現異常時,可以使用try···catch、try···catch···finally或try···finally進行處理。
1. 使用try···catch處理異常
try後是正常執行的語句,而catch後是對異常處理的語句,catch的括號中是程序需要處理的異常類型。語法格式如下:
try {
正常執行的語句
} catch(Exception e) {
對異常進行處理的語句
}
這裏舉一個算數異常的例子,如下。
1 public class ExceptionTest {
2
3 public static void main(String[] args) {
4 int result = 1 / 0;
5 try {
6 System.out.println(result);
7 } catch (Exception e) {
8 System.out.println("拋出異常:" + e.getMessage());
9 }
10 }
11
12 }
這裏1/0是個異常的算法,因爲除數不能爲0。運行結果如下:
因爲有異常,所以不執行try後的語句,從而執行catch後的語句。其中“e.getMessage()”是獲取異常信息的方法,用於獲取詳細消息字符串;此外還有printStackTrace()方法,用於將其棧蹤跡輸出至標準錯誤流;toString()方法用於獲得簡短描述。
2. 使用try···catch···finally處理異常
這裏try、catch後的語句與前面的相同,而finally後的語句無論是否發生異常都要執行,因此finally語句塊通常用於執行垃圾回收。語法格式如下:
try {
正常執行的語句
} catch(Exception e) {
對異常進行處理的語句
} finally {
一定會被處理的語句
}
3. 使用try···finally處理異常
在程序發生異常時,就可以在finally語句塊中對其進行相應的處理,另外當程序沒有發生異常時,執行完try和finally之間的語句後,也將執行finally語句塊中的代碼。語法格式如下:
try {
需要執行的語句
} finally {
一定會被處理的語句
}
三、拋出異常
對於程序中發生的異常,除了上面的try···catch語句處理之外,還可以使用throws聲明或throws語句拋出異常。
1. 使用throws聲明拋出異常
throws用於方法聲明,在聲明方法時使用throws聲明拋出異常,然後在調用該方法中對異常進行處理。
如需聲明多個異常,各異常間要用逗號分隔,語法格式如下:
數據類型 方法名(形參列表) throws 異常類1, 異常類2, ……, 異常類n {
方法體;
}
比如用throws拋出Exception異常。
public void showInfo() throws Exception { // 拋出Exception
FileInputStream in = new FileInputStream("C://Record.txt"); // 創建IO對象
}
2. 使用throw語句拋出異常
如果希望程序自行拋出異常,可以使用throw語句來實現。語法格式如下: throw new Exception("對異常的說明");
使用throw語句拋出的是異常類的實例,通常與if語句一起使用。如:
if(x < 0) {
throw new Exception("程序異常,x不能小於0。");
}