在构造函数中使用this()

时间:2014-04-11 04:39:47

标签: java constructor this

在Oracle提供的在线Java教程中,我看到了以下内容。

public class Rectangle {
    private int x, y;
    private int width, height;

    public Rectangle() {
        this(0, 0, 1, 1);
    }
    public Rectangle(int width, int height) {
        this(0, 0, width, height);
    }
    public Rectangle(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }
    ...
}

前两个构造函数使用this()函数来设置类的实例变量。 是否有理由让第三个构造函数不仅仅使用this(x,y,width,height)
注意:这只是为了显示(在教程设置中)this也是一个关键字,还可以用来设置实例变量吗?

2 个答案:

答案 0 :(得分:4)

  

是否有理由第三个构造函数不能简单地利用   此(X,Y,宽度,高度)。

因为是将使用

调用的构造函数
this(x, y, width, height);

这将导致无限递归循环。


正如Keppil在评论中所说,this是一个关键字。使用时如

this(x, y, width, height);

在构造函数中,它使用适当的参数列表调用类构造函数。在这种情况下,该构造函数第三个​​构造函数。所以你的建议是第三个构造函数调用第三个构造函数,它调用第三个构造函数,令人作呕。

答案 1 :(得分:0)

来自jls-8.8.7.1

  

备用构造函数调用以关键字this开头(可能以显式类型参数开头)。它们用于调用同一类的替代构造函数。


所以你在同一个构造函数中使用this调用相同的构造函数然后它将导致无限的递归循环,这是Java中的编译时错误。

来自jls-8.1.2

  

在类的类型参数部分中,如果S是T的边界,则类型变量T直接依赖于类型变量S,而如果T直接依赖于S或T直接依赖于T,则T依赖于S一个依赖于S的类型变量U(递归地使用这个定义)。

     

如果类的类型参数部分中的类型变量依赖于自身,则是编译时错误。