叶予清晨

叶予清晨

hhh

java資源管理

java 的資源#

  1. 內存資源:對象、數組等佔用的內存空間
  2. 物理資源:文件句柄、數據庫連接、網絡連接等
  3. 內存與物理資源的區別
  • 內存資源由JVM自動管理,物理資源需要手動管理
  • 對象不被引用時,內存資源會自動回收,內存資源釋放,而物理資源仍被佔用
  • 例子:內存資源:在閱讀區看書,看完直接走;物理資源:借書需要主動還書,不還的話會一直佔用書籍

java 內存管理的基本原理#

  1. 堆內存:存儲對象實例
  2. 棧內存:存儲基本數據類型和對象引用

java 物理資源管理中 try-with-resources 的工作原理#

這是Java 7引入的特性
任何實現了AutoCloseable接口的類都可以使用
編譯器會自動將其轉換為帶finally的代碼

// 當我們寫這樣的代碼時:
try (FileInputStream file = new FileInputStream("test.txt")) {
    // 使用文件
}

// 編譯器會自動將其轉換為類似這樣的代碼:
FileInputStream file = new FileInputStream("test.txt");
try {
    // 使用文件
} finally {
    if (file != null) {
        file.close();
    }
}

java 中管理物理資源的方法#

  1. 傳統方式 (不推薦)
FileInputStream file = null;
try {
    file = new FileInputStream("test.txt");
    // 使用文件
} catch (Exception e) {
    // 處理異常
} finally {
    if (file != null) {
        file.close(); // 手動關閉資源
    }
}
  1. 現代方式 (推薦)
try (FileInputStream file = new FileInputStream("test.txt")) {
    // 使用文件
} catch (Exception e) {
    // 處理異常
} // 自動關閉資源
  1. Java 資源管理完整總結:

核心原則:
使用 try-with-resources 自動管理資源
正確處理檢查型異常
遵循 "後進先出" 的資源關閉順序

資源類型:
常見的需要管理的資源

  • InputStream/OutputStream (文件操作)
  • Connection/Statement/ResultSet (數據庫操作)   
  • Socket (網絡連接)
  • Channel (NIO 操作)

標準模板:

try (Resource1 r1 = new Resource1();    
     Resource2 r2 = new Resource2()) {
    // 使用資源
} catch (Exception e) {
    // 異常處理
}

Java 資源管理的方式:#

1. 文件系統資源:

  • 使用 File 類
    File file = new File("test.txt");

  • 使用 Path 接口(Java 7+)
    Path path = Paths.get("test.txt");

2. 網絡資源:

  • 使用 URL 類
    URL url = new URL("https://example.com");
    URLConnection conn = url.openConnection(); 

  • 使用 Socket
    Socket socket = new Socket("localhost", 8080);

3. 類路徑資源:

  • 使用 ClassLoader
    InputStream is = getClass().getClassLoader().getResourceAsStream("config.properties");

  • 使用 Class
    InputStream is = MyClass.class.getResourceAsStream("/config.properties");
    4. 數據庫資源:

  • 使用 JDBC
    Connection conn = DriverManager.getConnection(url, username, password); 

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。