看看這個例子:的方法中創建一個新的實例,它仍然是外界方法
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()
,新機箱的實例是創建爲參數engine
對象,並且創建的新對象的引用也保持在方法外?例如:
如果我調用方法
print()
調用foo()
它將打印創建新對象Chassis
的內存地址後?
如果我叫
doSomething()
新Engine
創建和我立刻打電話setEngine
,在這種情況下,類車點的引擎「指針」到新的實例我創建:- 舊引擎 「指針」 是carbage收集
- 現在的參考是創建的新實例
- 如果我回電foo,一個新的機箱是由一個新的引擎實例創建的?
所有這些考慮是正確的?
好的,所以它會打印兩個地址的內存,理解。關於其他的考慮@Abimaran Kugathasan。 – OiRc
@Cimat:答案更新了 –
,在這種情況下,它是整個舊的對象機箱,可以被刪除?,自然在調用doSomething()之後,因爲您可以看到沒有該對象的強引用,並且新實例可以創造得很好@Abimaran Kugathasan – OiRc