2015-05-21 153 views
2

如果我使用此關鍵字調用同一類的另一個構造函數。它會創建兩個對象嗎?構造函數鏈會在Java中創建多個對象嗎?

如果是這樣,哪個對象會在下面的例子中活躍:

Class Sample { 
    int a; 
    String b; 

    Sample() { 
     this("Hello"); 
     a=10; 
    } 

    Sample(String temp) { 
     b = temp; 
    }  
} 

我想知道構造函數鏈的行爲。請解釋它是如何工作的?

回答

8

不,構造函數鏈不會創建額外的實例,它只是執行鏈式構造函數的邏輯,允許您重用其代碼。

+0

感謝您的輸入。所以,這意味着,它與調用另一種方法相同。 – Raashith

+1

@ user3232754這不完全相同。對其他構造函數的調用必須是構造函數中的第一行,而另一個構造函數隱式調用超類的構造函數。另外,您只能從構造函數中進行此調用。如果它像其他方法一樣,可以用任何方法調用它。 – Eran

2

沒有this("Hello");這裏會打電話給Sample(String temp)構造,它不會產生另一個對象。

+0

謝謝了:) – Raashith

0

正如其他人提到你只會得到一個對象,每個構造函數都初始化同一個對象。

最好看自己:

public class Sample { 
    int a; 
    String b; 

    Sample() { 
     this("Hello"); 
     a=10; 
     System.out.println("B: "+ hashCode()); 
    } 

    Sample(String temp) { 
     b = temp; 
     System.out.println("A: "+ hashCode()); 
    } 

    public static void main(String[] args) { 
     new Sample(); 
    } 

} 

。請注意,不能完全初始化調用對象的實例方法可能會造成問題,如果您嘗試訪問未初始化的字段,以便謹慎行事。

相關問題