2013-04-07 91 views
33

我遇到了這個代碼塊,有這一行我不會理解它的意義或做什麼。「this()」方法是什麼意思?

public Digraph(In in) { 
    this(in.readInt()); 
    int E = in.readInt(); 
    for (int i = 0; i < E; i++) { 
     int v = in.readInt(); 
     int w = in.readInt(); 
     addEdge(v, w); 
    } 
} 

我明白或this.variable的,但什麼是this()

+0

@Avi我當時就在想這個聽起來很熟悉。 – 2013-04-10 23:06:17

回答

48

這是構造函數重載:

public class Diagraph { 

    public Diagraph(int n) { 
     // Constructor code 
    } 


    public Digraph(In in) { 
     this(in.readInt()); // Calls the constructor above. 
     int E = in.readInt(); 
     for (int i = 0; i < E; i++) { 
     int v = in.readInt(); 
     int w = in.readInt(); 
     addEdge(v, w); 
     } 
    } 
} 

你可以說這個代碼是一個構造函數,而不是由缺少返回類型的方法。 這與在構造函數的第一行調用super()以便初始化擴展類非常相似。你應該在你的構造函數的第一行調用this()(或this()任何其他重載),從而避免構造函數代碼重複。

您也可以看看這個帖子:Constructor overloading in Java - best practice

+0

謝謝你...很好的信息確實 – Gattsu 2014-01-29 09:08:11

10

使用這個()作爲這樣的一個功能,本質上調用類的構造函數。這允許您在一個構造函數中進行所有通用初始化,並在其他方面進行專業化。所以在這段代碼中,例如對this(in.readInt())的調用正在調用具有一個int參數的Digraph構造函數。

3

類有向圖的其他構造與int參數。

Digraph(int param) { /* */ } 
8

此代碼段是一個構造函數。

這次調用this調用同一類

public App(int input) { 
} 

public App(String input) { 
    this(Integer.parseInt(input)); 
} 

的另一個構造在上面的例子,我們有一個構造函數的int,而另一種一String。這需要一個String構造函數轉換Stringint,然後委託給int構造。

注意,另一個構造函數或超類構造函數(super())的調用必須在構造函數中的第一道防線。

也許看一看this的構造函數重載的更詳細的解釋。

3

調用this基本調用類的構造函數。 例如,如果你擴展的東西,比add(JComponent)一起,你可以這樣做:this.add(JComponent).

2

構造函數重載:

例如:

public class Test{ 

    Test(){ 
     this(10); // calling constructor with one parameter 
     System.out.println("This is Default Constructor"); 
    } 

    Test(int number1){ 
     this(10,20); // calling constructor with two parameter 
     System.out.println("This is Parametrized Constructor with one argument "+number1); 
    } 

    Test(int number1,int number2){ 
     System.out.println("This is Parametrized Constructor with two argument"+number1+" , "+number2); 
    } 


    public static void main(String args[]){ 
     Test t = new Test(); 
     // first default constructor,then constructor with 1 parameter , then constructor with 2 parameters will be called 
    } 

} 
2

this();是構造函數用於調用另一構造函數, 例如: -

class A{ 
    public A(int,int) 
    { this(1.3,2.7);-->this will call default constructor 
    //code 
    } 
public A() 
    { 
    //code 
    } 
public A(float,float) 
    { this();-->this will call default type constructor 
    //code 
    } 
} 

注意: 我沒有在默認構造函數中使用this()構造函數,因爲它會導致死鎖狀態。

希望這將幫助你:)

4

這是幾乎相同的

public class Test { 
    public Test(int i) { /*construct*/ } 

    public Test(int i, String s){ this(i); /*construct*/ } 

} 
+0

你的意見是搞亂你的右括號 – 2013-04-10 23:07:20

+0

@亞歷山大這是因爲我從OP複製他們爲清晰。 – Antimony 2013-04-10 23:24:46