对Closable对象

时间:2015-05-27 22:38:50

标签: java

说,我正在使用连接到名为con的数据库(或套接字或其他任何Closable)。 close()之后会发生什么? con是否等于null或者还有什么内容? con.close()con = null之间有什么区别?

1 个答案:

答案 0 :(得分:5)

当您调用close时,该对象应释放它在幕后使用的所有资源。如果是java.sql.Connection的实例,它将是以下两种情况之一:

  • 释放与数据库的任何物理连接,从而释放资源。手动打开数据库连接时会发生这种情况,例如DriverManager.getConnection(...)
  • 进入睡眠状态并等待再次调用。当Connection由数据库连接池处理的DataSource处理时,会发生这种情况。

设置对象con = null只是为变量赋值null,引用仍然有效,直到垃圾收集器决定将其删除。尽管如此,将Connection设置为null 并不会调用close方法,因此您可能会发生内存泄漏。

作为最佳做法,您应始终close的实例上调用Closeable方法或使用try-with-resources(自Java 7以来可用)以确保资源总是关闭的。