在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
也是一个关键字,还可以用来设置实例变量吗?
答案 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中的编译时错误。
在类的类型参数部分中,如果S是T的边界,则类型变量T直接依赖于类型变量S,而如果T直接依赖于S或T直接依赖于T,则T依赖于S一个依赖于S的类型变量U(递归地使用这个定义)。
如果类的类型参数部分中的类型变量依赖于自身,则是编译时错误。