是否有Java的析构函数?我似乎无法找到任何关于此的文档.如果没有,我怎样才能达到同样的效果?
为了使我的问题更具体,我正在编写一个处理数据的应用程序,并且规范说应该有一个"重置"按钮,使应用程序恢复到其原始的刚启动状态.但是,除非关闭应用程序或按下重置按钮,否则所有数据都必须为"实时".
作为一名C/C++程序员,我认为实现这一点非常简单.(因此我计划最后实现它.)我构建了我的程序,使得所有'可重置'对象都在同一个类中,这样我就可以在按下重置按钮时销毁所有'实时'对象.
我在想如果我所做的只是取消引用数据并等待垃圾收集器收集它们,如果我的用户反复输入数据并按下重置按钮,是否会出现内存泄漏?我也在想,因为Java作为一种语言非常成熟,应该有办法防止这种情况发生或优雅地解决这个问题.
我一直在阅读关于finalize()的很多新手Java问题,并发现有点令人困惑的是,没有人真正说明finalize()是一种不可靠的清理资源的方法.我看到有人评论说他们用它来清理Connections,这真的很可怕,因为接近Connection的关闭的唯一方法就是最终实现try(catch).
我没有受过CS的教育,但是我已经用Java专业编程近十年了,我从未见过有人在生产系统中实现finalize().这仍然不意味着它没有它的用途,或者我与之合作过的人一直在做正确的事.
所以我的问题是,实现finalize()的用例是什么,无法通过语言中的其他进程或语法更可靠地处理?
请提供具体的方案或您的经验,只是重复Java教科书,或最终确定的用途是不够的,这不是这个问题的意图.
例如:
try
{
SomeObject someObject = new SomeObject();
someObject.dangerousMethod();
}
catch(Exception e)
{
}
someObject.anotherMethod(); //can't access someObject!
Run Code Online (Sandbox Code Playgroud)
但你可以在try/catch块之前声明它然后它工作正常:
SomeObject someObject;
try
{
someObject = new SomeObject();
someObject.dangerousMethod();
}
catch(Exception e)
{
}
someObject.anotherMethod(); //works fine
Run Code Online (Sandbox Code Playgroud)
我只是想知道这个的设计原因.为什么在try/catch块内创建的对象不在方法的其余部分范围内?也许我不会深入了解try/catch除了观看Exceptions投掷之外的工作方式.
我将在目录中拥有大量文件.我将使用文件名File.getName()并将其记录到日志文件中.我认为,我不需要关闭文件,因为我没有在其中进行任何读/写操作.
它是否正确?