Java 是否支持 RAII/确定性销毁?
自从我使用Java以来,至少已经有5年了,当时,每当你想分配一个需要清理的对象(例如套接字,DB句柄)时,你必须记住添加一个块并在那里调用清理方法。finally
相比之下,在C++(或对象生存期确定性的其他语言,例如Perl)中,类实现者将定义一个析构函数,每当该类的对象超出范围时,该函数就会执行清理。这种方法的优点是对象的用户不能忘记清理它 - 即使抛出异常,也会自动调用析构函数。这种方法被称为RAII的相当可怕的名称 - “资源获取是初始化”。
根据我的经验,以“RAII方式”做事为我节省了大量的脑力开销,因为我不必担心资源是否以及何时发生。我们正在考虑将Java用于中型项目,我想知道自从我上次查看该语言以来添加到该语言的许多新功能中,是否存在某种确定性破坏。(我希望我抱怨“Java没有RAII”在这个帖子上受到谴责,但到目前为止,我无法通过谷歌搜索找到任何细节。
因此,如果有人能为我指出一些关于如何在Java中解决这个问题的介绍性材料,那就太好了!