java - 终止一个对象与使它无效一样吗?

标签 java oop effective-java

所以我一直在学习“Effective Java 2nd Ed”。

在第 7 项中,他谈到不使用终结器,因为它们会导致很多问题。

但是我们可以“提供一个明确的终止方法”而不是使用终结器,一个例子就是 close 语句。而且我不明白什么是“终止语句以及它们与终结器之间的区别是什么?

我得出的结论是,终止一个对象就像使它无效,从而释放资源。但我想我不太了解其中的区别。所以我感谢任何帮助。

谢谢!

最佳答案

But instead of using finalizers we can " provide an explicit termination method" and an example of those is the close statement .

作者引用了一个 close() 方法,该方法提供了一种方法来清理使用资源释放的对象。

例如,当您创建和操作 InputStreamOutputStream 时,您不想依赖 Java 终结器(这些接口(interface)的某些子类可能存在) . 例如,定义 finalize() 方法的 FileInputStream 类就是这种情况)释放与流关联的资源,但您想使用由提供的方法执行此操作的 API:void close() 因为它作为终结器更可靠。

java.sql.Statement 以相同的方式工作:它提供了一个 close() 方法来释放与语句实例关联的 JDBC 资源。

I came to the conclusion that terminating an object is like nulling it thus the resourses is released .

将对象分配给 null 将不必释放所有应该释放的资源。此外,如果该对象或该对象的某个字段仍被另一个活着的对象引用,则该对象将不会被垃圾收集而变得难以辨认

最后,被垃圾回收可能也需要一些时间。
如果我们不需要使用该对象,为什么要等待?

关于java - 终止一个对象与使它无效一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44370870/

相关文章:

java - 将 json 响应转换为自定义类时出错

php - 将数组转换为对象以自动化 array_key_exists()

java - 谁能给我解释一下 Joshua Bloch 第 41 项中的例子吗?

java - 如何在 switch case 中匹配 Java 正则表达式?

java - 正则表达式无法使特殊结构 (?=x) 起作用

java - Spring Webflow 中的数据绑定(bind)问题

java - Java四分卫类

python - 如何在for循环中从类中获取实例名称

java : Function objects as strategies

java - 了解有效的 Java 深拷贝示例