在方法内创建一个新实例,它仍然在方法之外

时间:2014-05-09 10:11:13

标签: java object reference

看看这个例子:

Class Car{
  private Chassis  chassis;
  private Engine engine;

  public Car(Engine engine){  //passing a object that is instantiated outside the class
    this.engine = engine;       
  }

  public void foo(){
      chassis = new  Chassis(engine);
  }
  public void print(){
     System.out.println(chassis);
  }

  public setEngine(Engine engine){
     this.engine = engine;    
  }
 }

class CarPark{
 private Car car;

 public CarPark(Car car){
    this.car = car;

 }     
public void doSometing(){
    Engine engine = new Engine();
    car.setEngine(engine);
 }

}

一些注意事项:

  • 如果我致电foo(),则会创建 Chassis 的新实例作为engine对象的参数, 以及创建的新对象也在方法之外吗?

    • 例如:

      如果我在调用print()后调用方法foo(),它会打印创建的新对象Chassis的内存地址吗?

  • 如果我致电doSomething(),则会创建新的Engine并立即拨打setEngine,在这种情况下, 引擎“指针” class car指向我创建的新实例

    • 旧引擎“指针”是收集的垃圾
    • 现在引用是新创建的实例
    • 如果我回拨foo,会使用新的引擎实例创建新机箱吗?

所有这些考虑因素都是正确的吗?

1 个答案:

答案 0 :(得分:2)

  

如果我调用foo(),则会创建一个新的Chassis实例作为参数an   引擎对象,以及创建的新对象的引用也保留   外面的方法吧?

     

例如:

     

如果在调用foo()之后调用方法print(),它将打印内存   机箱创建的新对象的地址?

是的,只要在同一个Car实例上调用这两个方法,你可以试试。

chassisCar类的实例字段,在foo()方法内,您正在创建Chassis的实例并将其分配给实例字段{{1} }

  

如果我调用doSomething(),则会创建一个新引擎并立即调用   setEngine,在这种情况下,引擎"指针"班车   指向我创建的新实例:

     

旧引擎"指针"是垃圾收集现在参考是   创建了新实例,如果我回调foo,则会创建一个新机箱   使用引擎的新实例创建?

那里的位校正,引用不是垃圾收集,只有对象是垃圾收集。当您将对象分配给引用时,如果它没有任何实时引用,则前一个对象将被GGed。