2014-04-11 73 views
0

在Oracle提供的在线Java教程中,我看到了以下内容。在构造函数中使用this()

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; 
    } 
    ... 
} 

前两个contructors使用this()功能设置类的实例变量。 第三个构造函数不是简单地使用this(x,y,width,height)是否有原因。
注意:这仅仅是显示(在教程设置中)this也是一个关键字,也可以用来设置实例变量?

+0

'this()'不是设置实例变量的关键字,它用于调用当前对象的其他构造函数。 – Keppil

回答

4

是否有一个原因是,第三构造并不简单地利用 此(X,Y,宽度,高度)。

因为是将与

this(x, y, width, height); 

被调用,这将导致无限递归循环构造。


正如Keppil说,在评论,this是一个关键词。当使用像

this(x, y, width, height); 

在一个构造函数中,它调用具有适当参数列表的类构造函数。在这种情况下,构造函数的第三个构造函数。所以你建议第三个构造函数调用第三个构造函数,它调用第三个构造函数ad nauseam。

0

jls-8.8.7.1

可选的构造调用开始与关键字this(可能带有明确的类型参数的开头)。它们用于调用同一个类的替代构造函数。


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

jls-8.1.2

在一类的类型参数部分,类型变量T直接取决于类型变量S如果S被绑定的T,而T依赖S IF任Ť直接取决于在S或T直接依赖于依赖于S的类型变量U(递归地使用此定义)。

如果类的类型参数部分中的类型变量依赖于它自己,那么编译时错误。

相关问题