2013-04-07 8 views
33

私はこのコードブロックに行きました。この1行は私が意味を理解していない、またはそれが何をしているのか分かりません。「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私はちょうどこれはおなじみの打診考えていたのです。 –

答えて

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

10

このような関数としてthis()を使用すると、基本的にクラスのコンストラクタが呼び出されます。これにより、1つのコンストラクタ内のすべてのジェネリックな初期化が可能になり、他のコンストラクタでは特殊化が行われます。たとえば、このコードでは、this(in.readInt())を呼び出すと、1つのint引数を持つDigraphコンストラクタが呼び出されます。

3

intパラメータを持つクラスDigraphの他のコンストラクタです。

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

このコードスニペットはコンストラクタです。

thisへのこの呼び出しは、私たちがintStringを取るものを取るコンストラクタを持っている上記の例では

public App(int input) { 
} 

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

同じクラスの別のコンストラクタを呼び出します。 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

あなたのコメントはあなたの閉じ括弧を台無しにしています –

+0

@Alexそれは明確にするためにOPからそれらをコピーしたからです。 – Antimony

関連する問題