Java将对象传递给对象

时间:2015-08-10 11:13:17

标签: java object reference

我知道有类似的问题已被问到但仍然试图了解它。 我正在追逐数据库连接未关闭的错误。简化为:

class Database {
    private Connection connection;

    Database () {
        connection = connectToDatabase ();
    }

    boolean isConnected () { return connection != null; }

    void disconnect () {
        if (connection != null)
            connection.close ();
    }

    void accessDb () { doSomethingWithDb (); }
}

class Foo
{
    private Database db;

    foo (Database d) {
        db = d;
    }

    void doFoo () {
        if (db.isConnected ())
            db.accessDb ();
    }
}

class Core
{
    Database db;

    private Foo foo;

    Core () {
        db = new Database;
        foo = new Foo (db);
    }

    void serve (String someClientRequest) {
        try {
            foo.doFoo ();
            if (db.isConnected ())
                db.accessDb ();
        } catch (SQLException ignore) {
        }
        finally {
            db.disconnect ();
        }
    }
}

class Servlet
{
    Servlet () {}

    void post (String someClientRequest) {
        Core core = new Core ();
        core.serve (someClientRequest);
    }
}

也许servlet可以在完成后调用core.db.disconnect()(好吧......可以吗?),但实际的实现更复杂。 所以问题是:Foo会创建一个新的数据库连接吗?来自C ++,我仍然觉得令人困惑的是,对象被称为“引用”,而事实上它们似乎是通过值传递/接受的......? 对不起,如果已经涵盖了这个问题,我发现了几个关于这个主题的回答,但没有一个能让我明白为什么那个愚蠢的db拒绝关闭。谢谢!

0 个答案:

没有答案