所以我一直在学习“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()
方法,该方法提供了一种方法来清理使用资源释放的对象。
例如,当您创建和操作 InputStream
或 OutputStream
时,您不想依赖 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/