2013-06-20 35 views
1

我正在學習Java,並閱讀文檔。類中的這個關鍵字

有上this page行對此我無法理解 -

... 此外,類方法不能因爲沒有實例,該指使用this關鍵字。 ...

我認爲這只是靜態類方法,它不能使用關鍵字this

爲了測試這個,我寫了下面這個,編譯。

import java.math.*; 

class Point { 

    public int x, y; 

    public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public double getDistanceFromOrigin() { 
     return Math.sqrt(this.x*this.x + this.y*this.y); 
    } 

} 

我有一個類的所有權利,其中一個方法是指this

我是以某種方式誤解事物嗎?

+0

*我認爲這只是靜態類方法,它不能使用'this'關鍵字。*,你說得對。 –

+0

你的方法不是靜態的,所以他們可以訪問'this'。 – rgettman

+1

你的鏈接壞了 –

回答

5

類方法靜態方法。 「類方法」是一種綁定到類定義(使用關鍵字static)的方法,與您編寫的對象/實例方法相反,這樣您就可以在基於該類構建的對象上調用它們。

你寫的代碼有兩個對象/實例方法,沒有類方法。如果你想在Java中使用類方法,你可以將它設爲靜態,然後你不能使用this

+0

ahh ..謝謝。我現在意識到。 – xylon97

1

我認爲這只是static類方法,它不能使用this關鍵字。

你說得對。類中的static方法屬於類,而不屬於對象引用。所以要證明你的句子,只需添加一個static方法並使用this關鍵字。例如:

class Point { 

    public int x, y; 

    public Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public double getDistanceFromOrigin() { 
     return Math.sqrt(this.x*this.x + this.y*this.y); 
    } 

    public static double getDistanceBetweenPoints(Point point1, Point point2) { 
     //uncomment and it won't compile 
     //double result = this.x; 
     //fancy implementation... 
     return 0; 
    } 

} 
1

你是正確的,只有static類方法不能使用this關鍵字,但你的代碼示例是非靜態的,所以this是完全有效的。

1

您在使用this的實例方法中引用當前實例。

public double getDistanceFromOrigin() { 
    return Math.sqrt(this.x*this.x + this.y*this.y); 
} 

如果你改變了方法,靜態方法,this將不可用,因爲靜態方法被綁定到類,而不是類,而this的特定實例是指一類的當前實例如果在方法中使用。

public static double getDistanceFromOrigin() { 
    return Math.sqrt(this.x*this.x + this.y*this.y); // compilation error here 
} 
1

閱讀在你發佈的鏈接內容後,它似乎用空話Class methods靜態方法


類方法

Java編程語言支持靜態方法以及靜態變量 。靜態方法,它有自己的 聲明static修飾符,應該用類名來調用,而不 需要創建類的實例,如

不能在靜態方法使用this因爲沒有實例(沒有this)可供參考。