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