在java中,我的proffesor告訴我們你不能在靜態方法內使用非靜態類成員。他還表示,你不能在靜態方法中使用「this」關鍵字。這是爲什麼?靜態方法內的非靜態成員
-3
A
回答
1
非靜態類成員和this
與類的實例關聯,而靜態方法不與任何實例關聯,但與類本身關聯。
0
因爲非靜態成員和this
關鍵字都指對象的實例。靜態方法屬於類,而不是實例,所以這兩件事在上下文中並不意味着什麼。
1
不能在靜態方法中使用非靜態變量,因爲靜態方法可以在沒有實例化的情況下執行(創建基於..的對象)類。由於非靜態變量可以通過使用對象的方法來改變,所以非靜態變量是特定於對象的。因爲您可以多次實例化一個類以創建多個對象,通過這些對象可以使用方法更改屬於這些對象的非靜態變量,所以對於此非靜態變量會有多個值。如果靜態方法能夠訪問非靜態變量,它將不知道使用哪個值。因此爲什麼它不能使用它。
至於this
,this
引用屬於該對象的非靜態變量。由於您無法從靜態方法訪問非靜態變量,因此您不應使用靜態方法調用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
知道關於類的一切,所以對象可以訪問所有的靜態方法類。
和class
有no
有關其objects
的信息,這就是爲什麼靜態方法無法訪問對象的成員。
相關問題
- 1. 非靜態類的靜態成員?
- 2. 從靜態方法訪問非靜態成員變量
- 3. 靜態Vs非靜態方法和成員交互
- 4. 靜態方法是指非靜態成員?
- 5. 方法 - 靜態成員
- 6. 是否有可能在C++中調用靜態成員方法內的非靜態成員方法?
- 7. C#靜態類 - 靜態類不能有非靜態成員
- 8. 非法引用非靜態成員... typedef?
- 9. 訪問靜態成員靜態成員
- 10. 獲取靜態方法內的非靜態方法名稱
- 11. 非靜態方法說它的靜態?
- 12. 非靜態的靜態方法
- 13. Boost.Bind非靜態成員
- 14. 訪問非靜態成員
- 15. 非靜態成員函數
- 16. 想從非靜態類訪問靜態成員的非靜態子類的Java
- 17. C++(非內置/類)靜態成員
- 18. 無法對非靜態類成員進行靜態引用
- 19. python類靜態方法動態綁定靜態數據成員
- 20. 靜態/非靜態方法問題
- 21. 泛型方法:靜態與非靜態
- 22. 靜態和非靜態方法工作
- 23. 靜態/非靜態方法參考
- 24. powermockito靜態和非靜態方法鏈
- 25. 不能使靜態方法非靜態
- 26. 靜態和非靜態方法
- 27. 靜態與非靜態方法2
- 28. 方法參考靜態與非靜態
- 29. 靜態參照非靜態方法getBaseContext()
- 30. 靜態與非靜態方法
您需要了解什麼是靜態方法。 – SLaks
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html http://introcs.cs.princeton.edu/java/21function/ – SLaks