2014-12-10 3 views
0

У меня есть приложение для Android, которое использует базу данных. Созданный мной класс db будет перебирать базу данных и использовать отдельный класс для «HOLD»? каждый ряд.Все объекты java хранятся в памяти до тех пор, пока не будут уничтожены?

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; 
} 

Класс плаката - как и следовало ожидать. Он имеет конструктор с каждой переменной, которая относится к столбцу и метод для установки и получения каждого значения столбца.

Итак, каждая строка теперь является собственным объектом, к которому можно получить доступ в любое время, или это класс плаката, который является объектом, и содержит все строки?

Кроме того, является ли этот объект в памяти до тех пор, пока приложение не завершится или не будет перезаписано новым экземпляром Плаката?

+0

Возможно, вы захотите прочитать о [разности между классами и объектами] (http://stackoverflow.com/questions/1215881/the-difference-between-classes-objects-and -instances). – azurefrog

+0

Вы возвращаете список 'Poster'. Список и его ссылки доступны, если есть ссылка на них. После того, как последняя ссылка исчезла, она * подходит для GC; когда этот GC происходит, зависит. –

ответ

3

Вы создаете несколько объектов Poster (экземпляры класса Poster)

Poster poster = new Poster(...); 

и хранить их в posterList (список объектов Стендовые, List<Poster>)

posterList.add(poster); 

, а затем вернуться в список с

return posterList; 

Вы можете использовать этот список для доступа к извлеченным объектам с помощью таких методов, как: posterList.get(0)

Созданные объекты будут храниться в памяти (в куче) до тех пор, пока они не будут удалены сборщиком мусора. Но сборщик мусора ничего не удалит, если вы держите ссылку на него. В вашем примере ссылки хранятся в posterList, поэтому объекты Poster будут удалены, пока вы не очистите список или не удалите все ссылки на список.

+0

Спасибо, что это помогает! – silversunhunter

1

Вы возвращаете список Poster возражений. Помните, что объект является не чем иным, как экземпляром класса. Каждый раз, когда вы вызываете Poster poster = new Poster(...);, вы создаете новый объект. То, что вы возвращаете, представляет собой список этих объектов, которые вы создали, которые хранятся в куче до завершения программы, или вы перезаписываете их.

+1

', которые удерживаются в куче до завершения программы или перезаписываются.« Я знаю, что вы имеете в виду, но это не совсем точно.Любой объект в куче становится подходящим для отметки и развертки, когда больше нет ссылок на него. Вам не нужно переписывать их, чтобы это произошло. – Simon

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] скорее всего), а также, «класс» является только планом, это не объект, в котором он вообще ничего не будет, он будет существовать как определение того, кем может быть объект, вам нужно погрузиться в основы этого.

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

Да переопределение объекта плаката, удалив его старую ссылку на новом, но вы правильно добавить ссылку на объект плаката к списку, прежде чем заменить его, так до тех пор, пока вы используете список , все эти ссылки не будут собирать мусор

Смежные вопросы