2010-03-03 183 views
0

我有一个名为BOM的对象类。 它有一个方法getChildItem(),它返回一个Item对象。Java对象持久性问题

比方说,我这样做:

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

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

会发生什么?它:

  • 其实并没有关闭模式,因为该节点的阵列中的
  • 仍接近该模型为子对象,一旦创建,是独立于模型bject的。
  • 关闭模型,并设置子对象为null(我敢肯定,这不会发生,那将肆虐,似乎违反直觉Java垃圾收集方法)

回答

1

不可能说你的close()方法做什么。可能你正在考虑像关闭数据库结果集或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

两个孩子和模式将成为相同的基础对象。关闭将在模型上被调用,因此任何依赖于它的对孩子的访问都将失败。

希望有所帮助。