"this()"方法是什么意思?

Sug*_*ara 43 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); 
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了什么this.method()this.variable有,但什么是this()

Avi*_*Avi 54

这是构造函数重载:

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); 
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过缺少返回类型来判断此代码​​是构造函数而不是方法.这非常类似于super()在构造函数的第一行中调用以初始化扩展类.您应该在构造函数的第一行调用this()(或任何其他重载this()),从而避免构造函数代码重复.

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


Sin*_*int 10

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


Bor*_*der 9

此代码段是构造函数.

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

public App(int input) {
}

public App(String input) {
    this(Integer.parseInt(input));
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我们有一个构造函数,它接受一个int和一个String.接受String转换String为an intint构造函数然后委托给构造函数.

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

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