2013-09-29 65 views
-3

在java中,我的proffesor告訴我們你不能在靜態方法內使用非靜態類成員。他還表示,你不能在靜態方法中使用「this」關鍵字。這是爲什麼?靜態方法內的非靜態成員

+8

您需要了解什麼是靜態方法。 – SLaks

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html http://introcs.cs.princeton.edu/java/21function/ – SLaks

回答

1

非靜態類成員和this與類的實例關聯,而靜態方法不與任何實例關聯,但與類本身關聯。

0

因爲非靜態成員和this關鍵字都指對象的實例。靜態方法屬於類,而不是實例,所以這兩件事在上下文中並不意味着什麼。

1

不能在靜態方法中使用非靜態變量,因爲靜態方法可以在沒有實例化的情況下執行(創建基於..的對象)類。由於非靜態變量可以通過使用對象的方法來改變,所以非靜態變量是特定於對象的。因爲您可以多次實例化一個類以創建多個對象,通過這些對象可以使用方法更改屬於這些對象的非靜態變量,所以對於此非靜態變量會有多個值。如果靜態方法能夠訪問非靜態變量,它將不知道使用哪個值。因此爲什麼它不能使用它。

至於thisthis引用屬於該對象的非靜態變量。由於您無法從靜態方法訪問非靜態變量,因此您不應使用靜態方法調用this

1

有時候一個例子有幫助。考慮這個類:

class Foo { 
    int bar; // non-static member 

    Foo(int bar) { 
    this.bar = bar; 
    } 

    static int getBar() { 
    return bar; // invalid - what if we have many Foos with different bars? 
    } 
} 

現在想象attemping使用這個類:

public static void main(String[] args) { 
    Foo foo1 = new Foo(1); // bar is 1 in this instance 
    Foo foo2 = new Foo(2); // bar is 2 in this instance 
    int bar = Foo.getBar(); // which instance of Foo would we get bar from? 
} 
0

非靜態類成員和this關鍵字與類對象和相關類的靜態方法有關。
事情是objects知道關於類的一切,所以對象可以訪問所有的靜態方法類。
classno有關其objects的信息,這就是爲什麼靜態方法無法訪問對象的成員。