異常的處理只有兩種方式
- 丟擲異常
- 捕獲異常
丟擲異常
什麼是丟擲異常?
目前為止任何異常,預設的處理方式都是丟擲
所謂丟擲異常就是直接將錯誤資訊列印到控制檯
怎麼宣告丟擲異常?
如果是執行時異常,不用處理,預設就會自動丟擲
如果是編譯期異常,想要丟擲異常,語法是
位置: 在方法引數列表後,{}前
寫: throws 異常類名,類名2,...
public static void main(String[] args)
throws ArithmeticException,ArrayIndexOutOfBoundsException {
}
宣告丟擲異常後,什麼效果?
如果程式碼一切正常,雖然宣告的有丟擲異常,也不會在控制檯列印異常資訊
如果程式碼真的有異常,宣告瞭丟擲異常,
1錯誤資訊就會在控制檯列印
2丟擲異常後,後續程式碼不再執行
throws/throw 關鍵字
在Java中, throw 和 throws 關鍵字是用於處理異常的。
throw 關鍵字用於在程式碼中丟擲異常,而 throws 關鍵字用於在方法宣告中指定可能會丟擲的異常型別。
throw 關鍵字
throw 關鍵字用於在當前方法中丟擲一個異常。
通常情況下,當程式碼執行到某個條件下無法繼續正常執行時,可以使用 throw 關鍵字丟擲異常,以告知呼叫者當前程式碼的執行狀態。
例如,下面的程式碼中,在方法中判斷 num 是否小於 0,如果是,則丟擲一個 IllegalArgumentException 異常。
例項
public void checkNumber(int num) {
if (num < 0) {
throw new IllegalArgumentException("Number must be positive");
}
}
throws 關鍵字
throws 關鍵字用於在方法宣告中指定該方法可能丟擲的異常。當方法內部丟擲指定型別的異常時,該異常會被傳遞給呼叫該方法的程式碼,並在該程式碼中處理異常。
例如,下面的程式碼中,當 readFile 方法內部發生 IOException 異常時,會將該異常傳遞給呼叫該方法的程式碼。在呼叫該方法的程式碼中,必須捕獲或宣告處理 IOException 異常。
例項
public void readFile(String filePath) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close();
}
一個方法可以宣告丟擲多個異常,多個異常之間用逗號隔開。
例如,下面的方法宣告丟擲 RemoteException 和
InsufficientFundsException:
import java.io.*; public class className { public void withdraw(double amount) throws RemoteException, InsufficientFundsException { // Method implementation } //Remainder of class definition
}
finally關鍵字
finally 關鍵字用來建立在 try 程式碼塊後面執行的程式碼塊。
無論是否發生異常,finally 程式碼塊中的程式碼總會被執行。
在 finally 程式碼塊中,可以執行清理型別等收尾善後性質的語句。
finally 程式碼塊出現在 catch 程式碼塊最後,語法如下:
try{ // 程式程式碼 }catch(異常型別1 異常的變數名1){ // 程式程式碼 }catch(異常型別2 異常的變數名2){ // 程式程式碼 }finally{ // 程式程式碼 }
例項
ExcepTest.java 檔案程式碼:
public class ExcepTest{
public static void main(String args[]){
int a[] = new int[2];
try{
System.out.println("Access element three :" + a[3]);
}catch(ArrayIndexOutOfBoundsException e){ System.out.println("Exception thrown :" + e);
}
finally{
a[0] = 6;
System.out.println("First element value: " +a[0]); System.out.println("The finally statement is executed");
}
}
}
以上例項編譯執行結果如下:
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed