是否所有java对象都被保存在内存中,直到被破坏?

时间:2014-12-10 19:44:10

标签: java android class object

我有一个使用数据库的Android应用程序。我创建的db类将迭代数据库并使用一个单独的类来“保持”?每一行。

public List<Poster> getAllPosters() {
    List<Poster> posterList = new ArrayList<Poster>();
    // Select All Query
    String selectQuery = "SELECT * FROM " + "posters";

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Poster poster = new Poster(Integer.parseInt(cursor.getString(0)),Integer.parseInt(cursor.getString(1)),Integer.parseInt(cursor.getString(2)),cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getString(7),cursor.getString(8));

            // Adding contact to list
            posterList.add(poster);
        } while (cursor.moveToNext());
    }
    db.close(); // Closing database connection
    // return contact list
    return posterList;
}

海报课程正如您所期望的那样。它有一个构造函数,每个变量都与一个列相关,另一个方法用于设置和获取每个列的值。

现在每行都是自己的对象,可以随时访问,还是作为对象的Poster Class,它包含所有行?

此外,这个对象是否在内存中,直到应用程序终止或被新的Poster实例覆盖?

3 个答案:

答案 0 :(得分:3)

您创建了多个Poster对象(Poster类的实例)

Poster poster = new Poster( ... );

并将它们存储在posterList(海报对象列表List<Poster>

posterList.add(poster);

然后使用

返回列表
return posterList;

您可以使用此列表通过以下方法访问检索到的对象:posterList.get(0)

创建的对象将存储在内存中(堆上),直到被垃圾收集器删除。但是如果您拥有对它的引用,垃圾收集器将不会删除任何内容。在您的示例中,引用保存在posterList中,因此在您清除列表或删除列表本身的所有引用之前,不会删除Poster个对象。

答案 1 :(得分:1)

您将返回Poster目标列表。请记住,对象只不过是一个类的实例。每次拨打Poster poster = new Poster( ... );时,您都在创建一个新对象。您返回的是您创建的这些对象的列表,这些对象在程序结束之前保留在堆上,或者您覆盖它们。

答案 2 :(得分:1)

So is each row now it's own object that can be accessed anytime or is it the Poster Class that is the object and it contains all of the rows?

现在每一行都处于不同的抽象层次,它们现在被映射到一个Java对象(最有可能是一个普通的旧Java对象[POJO]),而且,“Class”只是一个蓝图,它不是一个对象它根本不会有任何东西,它将作为对象的定义而存在,你需要深入了解它的基础。

Also, is this object in memory until the app terminates or is overwritten by a new instance of Poster?

是的,你通过删除旧的引用来覆盖海报对象,但是在覆盖它之前你正确地将海报对象的引用添加到列表中,所以只要你使用列表,所有这些引用不会被垃圾收集

相关问题