首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

構造器異常處理難點:資源清理時機與 finally 陷阱

     編輯:Java 相關知識

核心問題

構造器中途拋出異常時,已獲取資源(如開啟文件)需清理,但 finally 會在構造器正常結束時也執行,導致過早釋放。

模範模式:顯式 cleanup()

class InputFile {
    private BufferedReader in;
    InputFile(String fname) throws Exception {
        try {
            in = new BufferedReader(new FileReader(fname));
        } catch (FileNotFoundException e) {
            throw e; // 尚未開啟,無需關閉
        } catch (Exception e) {
            try { in.close(); } catch (IOException ignored) {}
            throw e;
        }
        // finally 不關閉,避免正常結束時釋放
    }
    String getLine() { ... }
    void cleanup() { try { in.close(); } catch (IOException ignored) {} }
}

使用端責任

InputFile in = new InputFile("test.txt");
try {
    while ((line = in.getLine()) != null) ...
} finally {
    in.cleanup(); // 確保釋放
}

關鍵點

  • FileNotFoundException 單獨捕獲,因資源未獲取。
  • 其他異常必須關閉已開資源後再拋出。
  • 不依賴 finalize()(不可靠),採用顯式 cleanup() 模式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved