2010-03-03 3 views
0

У меня есть класс объектов под названием BOM. У этого метода есть метод getChildItem(), который возвращает объект Item.Вопрос о сохранении объекта Java

Давайте говорить, что я это сделать:

BOM model = new BOM(); 
Item child = model.getChildItem(); 
ArrayList a = new ArrayList(); 

a.add(child); 
model.close(); 

Что происходит? Имеет ли это:

  • Не на самом деле закрыть модель, так как узла в массиве
  • Тем не менее закрыть модель как дочерний объект, созданный когда-то, не зависит от модели ▪ Таблица.
  • Закройте модель и установить дочерний объект в нуль (я уверен, что этого не произойдет, это будет сеять хаос и кажется нелогичной методология Java сборки мусора)

ответ

1

Невозможно сказать, что делает ваш метод close(). Возможно, вы думаете о каком-то значении, таком как Database resultSet или inputStream, где значения недоступны после того, как вы закрылись? Это не так, если вы явно не создали свои объекты таким образом, они не являются частью основного языка.

В контексте, я думаю, вы имеете в виду «что происходит, когда родительский объект выходит из сферы действия?» (То есть получает право для сбора мусора)

Что происходит:

BOM model = new BOM(); 
Item child = model.getChildItem(); 
// you now have a handle to the child object. Presumably, so does model, but we don't care about that. 
ArrayList a = new ArrayList(); 
a.add(child); 
//a now has a handle to child. 
model.close(); 
// child is not eligible for garbage collection because a still has a handle to it. 
0

Оба ребенка и модель будет быть одним и тем же основным объектом. close будет вызываться на модели, поэтому любой доступ к дочернему элементу, который опирается на его открытость, теперь терпит неудачу.

Надеюсь, что это поможет.

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