我知道this
代表調用該方法的對象和static
方法不綁定到任何對象,但我的問題仍然是你可以調用類對象的靜態方法。爲什麼在靜態方法中不允許使用「this」?
爲什麼java已經提供這個東西,而不是爲this
?
我知道this
代表調用該方法的對象和static
方法不綁定到任何對象,但我的問題仍然是你可以調用類對象的靜態方法。爲什麼在靜態方法中不允許使用「this」?
爲什麼java已經提供這個東西,而不是爲this
?
this
指向類的當前實例。
靜態方法與類關聯,而不是實例,因此this
沒有指向任何內容。
下面是一個例子:
public class Foo {
private String name;
public static void someClassMethod() { System.out.println("associated with a class"); }
public Foo(String n) { this.name = n; }
public String getName() { return this.name; }
public void setName(String n) { this.name = n; }
public void doAnotherThing() {
Foo.someClassMethod(); // This is what is really happening when you call a static method in an non-static method.
}
}
答案很簡單可能性:this
沒有在非靜態方法之外定義。
在一個實例上調用靜態方法是一個語法速記,我不同意應該存在。
+1 - 我同意。我喜歡將靜態方法明確地與他們的類聯繫起來,以使其清晰。沒有這種猜測。 – duffymo
這裏的區別在於類別和對象。在對象上調用非靜態方法,而在類上調用靜態方法。
您可以看到一個Class作爲一個藍圖,使用該藍圖構建對象。 類House
有一個靜態方法hasDoor()
(將返回true
),而類型House
的對象可以有一個方法openDoor()
。你不能打開藍圖的大門。
可以撥打House.hasDoor()
,但不能撥打House.openDoor()
。一個可以調用
House h = new House();
h.openDoor();
雖然你可以調用h.hasDoor()
,這是一個有點討厭的,應在大多數情況下,要避免
順便說一句。 'this'不是調用方法的對象,方法所屬的對象。 – Ixx
(在靜態*方法中,「this」意味着什麼?類不是「頭等對象」,通過Class來折扣曝光......我真的希望它們是,但這是Java而不是Ruby或Python。 ) – 2012-06-16 23:14:50