Java 对象销毁前资源清理

Java resource clean up before object destruction

我有以下问题,我知道已经有很多问题了,但是 none 这些问题给了我一个真正令人满意的答案!我用 C++ 写了很多东西,这种语言提供了一个析构函数,Java 不是因为垃圾收集。

简单介绍一下我的情况:我写了一个访问本地 Sqlite3 数据库的软件。我写了一个中央单例 class 来访问这个数据库。多个其他 classes 通过此包装器 class 访问数据库。这是这个包装器的伪代码 class:

public class MyDbWrapper
{
    private currentDbConnection;

    public MyDbWrapper(dbPath)
    {
        // Open the database connection with given path
    }

    public readFromDb()
    {
        ... // Uses the class member currentDbConnection
    }

    public writeToDb()
    {
        ... // Uses the class member currentDbConnection
    }

    public closeDb()
    {
        ...
    }
}

现在我的问题是,如何确保在退出应用程序之前关闭数据库连接?是的,我已经实现了 AutoCloseable 接口,是的,我已经使用 try-with-resources 进行了很多工作,但是由于多个 classes 的访问,这不是一个真正的选择! 在 C++ 中,析构函数可以解决这个问题,但是 java 中可能的 "equivalent" 方法 finalizedeprecated!

还有其他选择吗?或者我应该完全重新设计我的完整包装器吗?如果是,如果我每次都重新打开数据库,我该如何防止因为大量读写访问而导致的性能问题?

就像 Joker_vD 已经说过的,我通过在程序的 main 方法中使用 try-with-resources 语句解决了这个问题...

public static void main(String [] args)
{
    try(MyDbWrapper wrapper = new MyDbWrapper())
    {
        // Execute other task with usage of the database wrapper
    }
}

使用此解决方案,无需析构函数或使用已弃用的方法finalize(),如果程序结束,数据库连接将关闭...

再次感谢并归功于Joker_vD