Java对象的生命

时间:2012-06-22 13:49:45

标签: java object object-lifetime

传递方法参数的Java Object的生命周期是什么?

例如我有一个对象Test

class Test{

    public string testType(){
       .....
    }
}

我有两个A和B类

class classA{

   classB b = new classB();

   void nextQuestion{
      b.start(new Test());
   }
}




class classB{
   void start(Test test){
      doSomething(test.testType());
   }
}

那么现在Test对象的生命是什么?它只是直到start方法的结尾,或者它会一直存在直到classB结束,或者它活着直到classA结束或者是其他东西。

3 个答案:

答案 0 :(得分:6)

它将保持至少直到start()方法结束,因为它已在那里声明,这就是它的范围。除此之外,它的存在掌握在垃圾收集器手中。


编辑:

start()结束时,我的意思是,直到该方法结束它的执行。即使您进行了所显示的更改,Object方法仍然需要start(),因此它仍然只存在至少start()方法的执行结束,除此之外,它取决于垃圾收集器。

答案 1 :(得分:2)

它的生命在调用new Test()时开始,并且可能在start方法完成后随时由垃圾收集器释放,因为在编译时可以证明它在以后永远不会被使用那一点。

如果start方法(例如)设置一个静态字段来引用该对象,则垃圾收集器在该引用被释放之前无法收集它:

private static Test lastTested;
...

void start(Test test){
   lastTested = test;
   doSomething(test.testType());
}

答案 2 :(得分:2)

确切的生命周期由垃圾收集器确定:一旦没有对该对象的引用,它就可以被GC回收。在你的情况下,它将一直存在至少ClassB.start()结束,因为如果该方法一旦完成就没有更多的引用