47

我遇到了这段代码,有这一行我不明白它的含义或它在做什么。

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()

4

8 回答 8

56

这是构造函数重载:

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()),从而避免构造函数代码重复。

您还可以查看这篇文章:Java 中的构造函数重载 - 最佳实践

于 2013-04-07T21:02:05.523 回答
11

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

于 2013-04-07T20:59:11.750 回答
10

此代码片段是一个构造函数。

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

public App(int input) {
}

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

在上面的示例中,我们有一个带有 a 的构造函数int和一个带有 a 的构造函数String。接受 a 的构造函数将 aString转换String为 an int,然后委托给int构造函数。

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

也许看看这个关于构造函数重载的更详细的解释。

于 2013-04-07T21:01:38.277 回答
4

几乎一样

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

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

}
于 2013-04-10T23:06:10.217 回答
3

具有 int 参数的 Digraph 类的另一个构造函数。

Digraph(int param) { /*  */ }
于 2013-04-07T21:00:07.313 回答
3

调用this本质上是调用类Constructor。例如,如果您正在扩展某些东西,而不是与 一起add(JComponent),您可以这样做:this.add(JComponent).

于 2013-04-07T21:34:35.420 回答
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 
    }

}
于 2013-04-08T05:13:21.973 回答
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()在默认构造函数中使用构造函数,因为它会导致死锁状态。

希望对你有帮助:)

于 2013-04-08T10:25:30.997 回答