繁体   English   中英

在方法内部创建一个新实例,但仍保留在方法外部

[英]create a new instance inside a method, and it remains outside method

看这个例子:

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对象的参数创建, 并且创建的新对象的引用也保留在方法外部?

    • 例如:

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

  • 如果我调用doSomething()则会创建一个新的Engine并立即调用setEngine ,在这种情况下, 类car的引擎“指针”指向我创建的新实例

    • 旧引擎“指针”被收集的汽化物
    • 现在引用是创建的新实例
    • 如果我回叫foo,会使用引擎的新实例创建一个新的底盘吗?

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

如果我调用foo(),则将Chassis的新实例作为引擎对象的参数创建,并且创建的新对象的引用也保留在方法外部,对吗?

例如:

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

是的,只要这两种方法都将在Car的同一实例上调用,您可以尝试一下。

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

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

收集了旧的引擎“指针”,现在引用是创建的新实例,如果我回叫foo,是否使用引擎的新实例创建了新的底盘?

在那里进行位校正,参考不是​​垃圾收集,只有对象是垃圾收集。 将对象分配给参考时,如果前一个对象没有任何实时参考,则它将被GGed。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM