【发布时间】:2013-04-10 20:10:41
【问题描述】:
我是 Java 新手,高中时有一些 C++ 背景。现在我正在尝试做点什么,我选择了 Java 作为编程语言。
我已经完成了我的功课,并且看了很多关于 Java 的“析构函数”、finalize() 方法和 close() 或 shutdown() 方法。但我仍然认为我不知道这应该如何工作(当然下面有更多信息)
好的,具体的问题是为什么我需要调用 close() 或 shutdown() 方法?
在我的特殊情况下,我正在使用一个我没有开发的处理智能卡读卡器的类,但我已经看到文件管理的情况,你必须调用 close( ) 方法,应该是类似的。
调用 close() 方法与在 C++ 中释放内存的想法不同(很糟糕)?意思是,我必须处理对象的删除或销毁......不是GC吗?
我尝试用于智能卡读卡器的类可能不是最好的,这可能是一个选项,这个类实现 finalize() 方法可能会更好,所以当不再使用并为 GC 做好准备,释放内存(很可能是本机代码)和/或释放 GC 可能不知道如何做的硬件资源。
但是文件管理类呢?这些都非常使用和维护,为什么仍然需要 close() 方法?我明白存在的目的,解锁文件,但为什么我要记得关闭它?一旦不再使用对象,然后自动解锁文件,至少在最常见的情况下是这样。
最后,用实现 finalize() 方法的类来包装需要关闭或关闭的类,并在那里我调用 close() 还是 shutdown() 方法?
我看到finalize()方法不是很流行,所以才问这个问题应该怎么解决。
提前致谢
胡安
PS:我所看到的:
Is there a destructor for Java?
Why would you ever implement finalize()?
http://www.codeguru.com/java/tij/tij0051.shtml
【问题讨论】:
-
在 Java 7 中,try-with-resources 语句可用于为您正确处理自动关闭资源。
标签: java garbage-collection shutdown finalize