[英]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(),则将Chassis的新实例作为引擎对象的参数创建,并且创建的新对象的引用也保留在方法外部,对吗?
例如:
如果我在调用foo()之后调用方法print(),它将打印机箱创建的新对象的内存地址?
是的,只要这两种方法都将在Car的同一实例上调用,您可以尝试一下。
chassis
是Car
类的实例字段,在foo()
方法中,您正在创建Chassis
的实例并将其分配给实例字段chassis
如果我调用doSomething(),则会创建一个新的Engine并立即调用setEngine,在这种情况下,类car的引擎“指针”指向我创建的新实例:
收集了旧的引擎“指针”,现在引用是创建的新实例,如果我回叫foo,是否使用引擎的新实例创建了新的底盘?
在那里进行位校正,参考不是垃圾收集,只有对象是垃圾收集。 将对象分配给参考时,如果前一个对象没有任何实时参考,则它将被GGed。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.