java垃圾回收机制不会回收任何物理资源(磁盘文件、数据库连接、网络连接),垃圾回收机制只能回收堆内存中对象所占用的内存。
方法一使用finally块,在finally块中写入资源回收代码,如下:
public class FinallyTest { public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("a.txt"); } catch (IOException e) { System.out.println(e.getMessage()); } // 在finally块中回收物理资源 finally { try { // 关闭文件输入流,释放与之关联的系统资源 fis.close(); } catch (Exception e) { System.out.println(e); } } } }
另一种更简洁的方法是使用try语句。
在try关键字后面紧跟一对圆括号,圆括号中声明初始化需要自动关闭的资源。
public class FinallyTest { public static void main(String[] args) { // 将需要关闭的资源放入try的()中,try块结束后自动释放物理资源 try (FileInputStream fis = new FileInputStream("a.txt")) { byte[] b = new byte[1024]; fis.read(b); } catch (IOException e) { System.out.println(e.getMessage()); } } }