3

我对此感到困惑:

class ClassA {

   ClassB car = new ClassB();

   ClassA(){
   }

   someMethod(){
   }

}


ClassC{

   ClassC(){    
   }

   someMethod(){
        ClassA spaceship = new ClassA();
   }

}
  • B 类不在构造函数或方法中实例化。它也没有被声明为静态的。那么,究竟什么时候 classB 被实例化了呢?

  • 'car' 实例能存活多久?换句话说,如果(A 类的)“宇宙飞船”实例被垃圾收集,那么(B 类的)“汽车”实例会发生什么?

4

2 回答 2

2

那么,究竟什么时候 classB 被实例化了呢?

我认为这ClassB是在初始化时ClassA初始化的。首先更准确的是分配给内存的对象,然后初始化它的字段(所以你的汽车变量),然后被称为构造函数。

'car' 实例能存活多久?

只要ClassA生活一般。但是,如果您明确地将您的汽车分配给它,NULL那么如果它的“父母”还活着,那么它也会被释放。

于 2013-03-31T12:33:45.367 回答
1

这是一个例子:

class A {
    B objectB = new B();

    public A() {
        System.out.println("In A Const");
    }
}

class B {

    public B() {
        System.out.println("In B const");
    }
}

class C {

    C() {}
    public void someMethod() {

        A objectA = new A();

        System.out.println("In method C");
    }
    public static void main(String args[]) {
        C objectC = new C();
        objectC.someMethod();
    }
}

o/p: In B const In A Const In 方法 C

每当创建一个对象时,首先调用构造函数,并且在实现构造函数中的代码之前,初始化该特定类中的变量,以便首先执行 B 类的构造函数,然后执行 A 类的构造函数

谢谢

于 2013-03-31T13:38:05.407 回答