← SEARCHABLE ARCHIVE
Java · 2026-08-06

Java 從基礎到精通 — 第 7 講

處理異常和資源嘗試失敗

INTERACTIVE READING MODE →

該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。

文件、網路和輸入值隨時都可能失敗。 Java 的異常和資源管理語法用於傳播故障並關閉任何路徑上的資源。

傳遞異常

public Settings loadSettings(Path path) throws IOException {
    String json = Files.readString(path);
    return parser.parse(json);
}

如果呼叫者必須決定如何恢復,請勿強制在內部隱藏異常。 新增上下文時,必須保留原始異常作為原因。

try {
    settings = loadSettings(path);
} catch (IOException error) {
    logger.warn("settings load failed", error);
    settings = Settings.defaults();
}

只捕獲可以處理的異常。 如果您捕獲所有異常並且不採取任何措施,即使是實際的錯誤也可以正常進行。

try-with-resources

public List<String> readLines(Path path) throws IOException {
    try (BufferedReader reader = Files.newBufferedReader(path)) {
        return reader.lines().toList();
    }
}

如果您建立一個在括號內實作 AutoCloseable 的對象,則會在區塊末尾呼叫 close。 檔案句柄在正常返迴路徑和異常路徑上都會被清除。

檢查異常和運行時異常

檢查異常揭示了它們是透過方法聲明還是透過 catch 處理。 執行時期異常(例如 IllegalArgumentException)通常用於無效的呼叫約定或程式錯誤。

兩者中的哪一個不一定更好,但標準是呼叫者是否可以恢復的失敗。

完成後替換狀態

Settings loaded = loadSettings(path);
currentSettings = loaded;

如果您完全建立新值並將其輸入到欄位中,即使載入失敗,現有設定也會保留。 異常設計不是要創建大量捕獲,而是要確定在發生故障時如何保留資源和物件狀態。