2014-04-11 107 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(遞歸地使用此定義)。

如果類的類型參數部分中的類型變量依賴於它自己,那麼編譯時錯誤。

相關問題