“this()”方法是什么意思?

时间:2013-04-07 20:57:34

标签: java constructor this constructor-overloading

我遇到了这段代码,并且有一行我不会放弃了解其含义或内容。

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.method()this.variable是什么,但this()是什么?

8 个答案:

答案 0 :(得分:53)

这是构造函数重载:

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

答案 1 :(得分:10)

使用this()作为这样的函数,本质上调用类的构造函数。这允许您在一个构造函数中进行所有通用初始化,并在其他构造函数中具有特化。因此,在这段代码中,对this(in.readInt())的调用是调用具有一个int参数的Digraph构造函数。

答案 2 :(得分:9)

此代码段是构造函数。

this的调用会调用同一个类的另一个构造函数

public App(int input) {
}

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

在上面的例子中,我们有一个带int的构造函数和带String的构造函数。采用String的构造函数将String转换为int,然后委托给int构造函数。

请注意,对另一个构造函数或超类构造函数(super())的调用必须是构造函数中的第一行。

也许请查看this以获取有关构造函数重载的更详细说明。

答案 3 :(得分:4)

几乎相同

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

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

}

答案 4 :(得分:3)

具有int参数的Digraph类的其他构造函数。

Digraph(int param) { /*  */ }

答案 5 :(得分:3)

调用this本质上调用类Constructor。 例如,如果您要扩展某些内容,而不是add(JComponent),那么您可以执行以下操作:this.add(JComponent).

答案 6 :(得分: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 
    }

}

答案 7 :(得分: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()构造函数,因为它会导致死锁状态。

希望这会对你有所帮助:)。