什麼是Java exception handling?如何利用try-catch block處理異常?
請舉例說明什麼是unchecked exception和checked exception?如何處理它們?
請列舉幾種Java異常處理中的關鍵字及其作用?
如何設計自己的Java異常類別?請使用代碼示例說明。
請比較throw和throws在Java異常處理中的區別,並舉例說明如何使用它們。
Java exception handling是一種解決代碼運行時遇到異常情況的機制。Java的exception handling機制允許程序在運行時處理錯誤,避免異常使程序崩潰並減少對代碼的影響。
Java異常處理語句的結構是:
try {
//代碼塊
} catch (exceptionType1 e1) {
//異常處理語句
} catch (exceptionType2 e2) {
//異常處理語句
} catch (exceptionType3 e3) {
//異常處理語句
} finally {
//可選代碼塊
}
其中,try塊包含可能會造成異常的代碼,catch塊用於處理異常類型,finally塊可選,包含在執行完try和catch塊之後始終執行的代碼。
以下是一個Java異常處理的示例,其中將嘗試讀取一個不存在的文件,捕獲FileNotFoundException並輸出錯誤信息:
import java.io.*;
class ExceptionExample {
public static void main(String[] args) {
try {
// 打開文件
FileInputStream file = new FileInputStream("example.txt");
} catch (FileNotFoundException e) {
System.out.println("找不到文件");
e.printStackTrace();
}
}
}
在上述代碼中,當程序嘗試讀取一個不存在的文件時,拋出FileNotFoundException異常。try塊的打開文件代碼可能會拋出異常,所以我們將其置於try塊中。如果FileNotFoundException異常被拋出,則catch塊將被執行。在catch塊中,我們輸出一個錯誤信息並使用e.printStackTrace()方法打印異常的調用棧信息,以幫助我們更好地理解錯誤原因。
public int getSquare(int num) {
if (num < 0) { //檢查參數是否小於0
throw new IllegalArgumentException(“The input number should be greater than or equal to 0.”);
}
return num * num;
}
public int getLength(String str) {
if (str == null || str.isEmpty()) { //檢查字串是否為空或null
throw new NullPointerException(“The input string cannot be null or empty.”);
}
return str.length();
}
public int getElement(int[] arr, int index) {
if (index < 0 || index >= arr.length) { //檢查索引值是否越界
throw new IndexOutOfBoundsException(“The index is out of bounds.”);
}
return arr[index];
}
public String getSubstring(String str, int n) {
if (str.length() <= n) { //檢查字串長度是否足夠
throw new RuntimeException(“The length of the input string is not greater than " + n + “.”);
}
return str.substring(0, n);
}
public int getSquareEven(int num) throws Exception {
if (num % 2 != 0) { //檢查整數是否為奇數
throw new Exception(“The input number should be even.”);
}
return num * num;
}