2012-05-18 61 views
6

我想知道這是什麼意思?java this(null)

public Settings() { 
    this(null); 
} 

上述代碼是「設置」類的構造函數。這(null)是什麼意思?

+0

需要更多的上下文。這是在類定義中嗎? –

+1

可能的重複[這是什麼類型的java構造函數?構造函數鏈?](http://stackoverflow.com/questions/9204560/what-type-of-java-constructors-are-these-constructor-chaining) –

+0

可能的重複[如何在Java中調用另一個構造函數?](http://stackoverflow.com/questions/285177/how-do-i-call-one-constructor-from-another-in-java) –

回答

12
public Settings() { 
    this(null); //this is calling the next constructor 
} 
public Settings(Object o) { 
// this one 
} 

這通常被用來傳遞默認值,這樣你就可以決定使用一個構造函數或其他..

public Person() { 
    this("Name"); 
} 
public Person(String name) { 
    this(name,20) 
} 
public Person(String name, int age) { 
    //... 
} 
+0

謝謝。例子真的有幫助! –

+0

不客氣(: – porfiriopartida

4

這是一個構造函數,它調用同一個類中的另一個構造函數。

您可能有這樣的事情:

public class Settings { 
    public Settings() { 
     this(null); // <-- This is calling the constructor below 
    } 

    public Settings(object someValue) { 
    } 
} 

通常這種模式被使用,以便您可以(通過呼叫者的易用性)提供了用較少的參數的構造函數,但仍保持包含在一個邏輯地方(被調用的構造函數)。

4

它在Settings類中調用一個不同的構造函數。 查找另一個接受單個參數的構造函數。

10

這意味着你正在調用一個重載的構造函數,它需要某種類型的Object,但是你不傳遞一個對象,而是一個普通的null

+0

可以調用一個繼承的構造函數,或者看起來不同? – ametren

+2

不,它不能@ametren,如果你想這樣做,你必須用'super(this)' –

+0

來完成它,那麼你可以用super來調用父構造函數,如果Settings將擴展一個接收String作爲參數的類,你可以使用超級(「somestring」) – porfiriopartida

1

它調用默認的構造函數傳遞零作爲參數...

1

嘗試讀取java中的重載構造函數,並且調用只有一個參數 的構造函數..

public Settings() { 
     this(null); 
    } 

    public Settings(Object obj){ 

} 
1

這在Java稱爲Constructor Chaining。通過這個調用,你實際上調用了你的類對象的重載構造函數。例

class Employee extends Person { 
    public Employee() { 
     this("2") //Invoke Employee's overloaded constructor"; 
    } 

    public Employee(String s) { 
     System.out.println(s); 
    } 
} 
0

這基本上調用同一個班的每一個所提及的其他參數化的構造函數。

有一點需要注意,如果沒有可用的參數化構造函數,它將產生一個錯誤。

我不認爲用null值傳遞this()會有任何用處。但問一個問題可能是一個棘手的問題。 :)