2013-03-31 77 views
3

我在這個感到困惑:實例化方法或構造的外部對象?

class ClassA { 

    ClassB car = new ClassB(); 

    ClassA(){ 
    } 

    someMethod(){ 
    } 

} 


ClassC{ 

    ClassC(){  
    } 

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

} 
  • B類未在構造函數或方法 實例。它也沒有被聲明爲靜態的。那麼,究竟何時classB是 實例化?

  • 多長時間的車「實例活?在其他 單詞中,如果(類別A)的太空船實例 獲得垃圾收集,「B」車輛實例(B類)會發生什麼?

回答

2

所以,當正好CLASSB被實例化?

我認爲,當ClassA初始化ClassB被初始化。首先更準確的是分配給內存的對象,然後初始化它的字段(所以你的汽車變量),然後被稱爲構造函數。

多長時間的車「實例活?

只要ClassA一般生活。但是,如果您明確地將您的車指定爲NULL,那麼如果它的「父母」存在,它也會被釋放。

+0

謝謝,我明白你在說什麼,但想知道在字段聲明中實例化ClassB的好處而不是在構造函數中? – Crocodile

+0

@鱷魚通常以這種方式用於聲明靜態或最終的字段,你確切地知道它們的初始值。 – Sajmon

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: 在乙常量 在一個const 在方法C中

當一個對象在第一次創建構造函數被調用和執行之前代碼在構造所以這就是執行類B的構造函數如何首先在該特定類中的變量被初始化,然後將該類的

由於

相關問題