阿摩線上測驗 登入

申論題資訊

試卷:104年 - 104 身心障礙特種考試_三等_資訊處理:程式語言#24069
科目:程式語言
年份:104年
排序:0

申論題內容

五、例外處理程序(exception handlers)處理的例外有那幾類?請分別舉例說明。Java 的例外處理程序如何處理例外?(20 分)

詳解 (共 2 筆)

詳解 提供者:114年高考上榜

系統錯誤(system errors):例如操作系統錯誤、硬體錯誤等,這些錯誤通常是由於系統或硬體失敗而導致的,例如硬碟損壞、網路連線失敗等。

 
程序錯誤(programming errors):例如除以零、存取不存在的資料、陣列越界等,這些錯誤通常是由程式設計人員在編寫程式時造成的。
 
邏輯錯誤(logic errors):例如計算錯誤、邏輯錯誤等,這些錯誤通常是由於設計不良而導致的。
 
Java 的例外處理程序使用 try-catch-finally 關鍵字組合處理例外。try 區塊內包含可能產生例外的程式碼,如果產生例外,程式會跳轉到對應的 catch 區塊處理該例外。finally 區塊內的程式碼無論是否產生例外,都會被執行。以下是 Java 的例外處理程序的示例:
 
try {
  // 可能產生例外的程式碼
} catch (ExceptionType1 e1) {
  // 處理 ExceptionType1 類型的例外
} catch (ExceptionType2 e2) {
  // 處理 ExceptionType2 類型的例外
} finally {
  // 無論是否產生例外都會執行的程式碼
}
在 try 區塊內,如果產生 ExceptionType1 類型的例外,程式會跳轉到第一個 catch 區塊,處理該例外。如果沒有產生 ExceptionType1 類型的例外,但產生 ExceptionType2 類型的例外,程式會跳轉到第二個 catch 區塊,處理該例外。如果沒有產生例外,程式會直接跳過 catch 區塊,執行 finally 區塊內的程式碼。
詳解 提供者:hchungw
例外處理程序處理的例外類別
例外(Exceptions)通常分為三大類:
檢查型例外(Checked Exceptions)
非檢查型例外(Unchecked Exceptions)
錯誤(Errors)
1. 檢查型例外(Checked Exceptions)
這些例外在編譯時由編譯器檢查,必須在程式中明確處理(通過 try-catch 區塊或在方法簽名中宣告)。如果沒有適當處理或聲明這些例外,程式將無法編譯通過。
例子:
IOException:當執行輸入輸出操作時可能會拋出,例如讀寫文件時。
SQLException:當與資料庫交互時可能會拋出,例如執行無效的 SQL 查詢。
java
複製程式碼
import java.io.*;
public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            FileReader file = new FileReader("somefile.txt");
            BufferedReader fileInput = new BufferedReader(file);
            fileInput.close();
        } catch (FileNotFoundException e) {
            System.out.println("File not found");
        } catch (IOException e) {
            System.out.println("Error reading file");
        }
    }
}
2. 非檢查型例外(Unchecked Exceptions)
這些例外在編譯時不會被強制檢查,通常由程式邏輯錯誤引起,如錯誤的資料輸入或不正確的操作。這些例外是 RuntimeException 的子類。
例子:
NullPointerException:當應用程式試圖在一個空引用上調用方法或訪問成員時。
ArrayIndexOutOfBoundsException:當應用程式試圖訪問陣列中不存在的索引時。
java
複製程式碼
public class UncheckedExceptionExample {
    public static void main(String[] args) {
        String str = null;
        try {
            System.out.println(str.length());
        } catch (NullPointerException e) {
            System.out.println("NullPointerException caught");
        }
        int[] numbers = new int[5];
        try {
            System.out.println(numbers[10]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("ArrayIndexOutOfBoundsException caught");
        }
    }
}
3. 錯誤(Errors)
這些錯誤通常是由於 JVM 層次的問題引起的,如資源耗盡、內存溢出等,通常不應該由應用程式捕捉或處理。錯誤是 Error 的子類。
例子:
OutOfMemoryError:當 JVM 無法分配足夠的內存時。
StackOverflowError:當 JVM 堆疊空間耗盡時(通常由無限遞迴引起)。
java
複製程式碼
public class ErrorExample {
    public static void main(String[] args) {
        try {
            recursiveMethod();
        } catch (StackOverflowError e) {
            System.out.println("StackOverflowError caught");
        }
    }
    public static void recursiveMethod() {
        recursiveMethod();
    }
}
Java 的例外處理程序如何處理例外?
Java 的例外處理程序主要是通過 try-catch 區塊和 finally 區塊來實現。以下是 Java 處理例外的一般結構:
try-catch 區塊:用於捕捉並處理可能發生的例外。
finally 區塊:無論是否發生例外,finally 區塊中的程式碼都會被執行,用於釋放資源等清理工作。
java
複製程式碼
public class ExceptionHandlingExample {
    public static void main(String[] args) {
        try {
            int[] numbers = new int[5];
            System.out.println(numbers[10]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Caught ArrayIndexOutOfBoundsException: " + e.getMessage());
        } finally {
            System.out.println("This block is always executed");
        }
    }
}
具體步驟
try 區塊:包含可能拋出例外的程式碼。
catch 區塊:捕捉並處理特定類型的例外,可以有多個 catch 區塊來處理不同類型的例外。
finally 區塊:無論是否發生例外,finally 區塊中的程式碼都會執行,通常用於釋放資源。
這樣,Java 的例外處理機制提供了一種結構化的方法來捕捉並處理程式執行過程中可能發生的各種例外情況,從而提高程式的健壯性和可靠性。