異常的處理

商鞅-210162701023發表於2024-08-05

異常的處理只有兩種方式

  • 丟擲異常
  • 捕獲異常

丟擲異常

什麼是丟擲異常?

目前為止任何異常,預設的處理方式都是丟擲

所謂丟擲異常就是直接將錯誤資訊列印到控制檯

怎麼宣告丟擲異常?

如果是執行時異常,不用處理,預設就會自動丟擲

如果是編譯期異常,想要丟擲異常,語法是

位置: 在方法引數列表後,{}前

寫: throws 異常類名,類名2,...

public static void main(String[] args) 
        throws ArithmeticException,ArrayIndexOutOfBoundsException {
        

}
宣告丟擲異常後,什麼效果?

如果程式碼一切正常,雖然宣告的有丟擲異常,也不會在控制檯列印異常資訊

如果程式碼真的有異常,宣告瞭丟擲異常,

1錯誤資訊就會在控制檯列印

2丟擲異常後,後續程式碼不再執行

throws/throw 關鍵字

在Java中, throwthrows 關鍵字是用於處理異常的。

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