任何人都可以請解釋爲什麼靜態方法調用非靜態方法是非法的嗎?從靜態方法調用非靜態方法
1
A
回答
13
一種非靜態方法是一種對特定的實例(對象)起作用並可訪問該對象的成員的方法實例。靜態方法不與特定實例關聯。
是合法的調用非靜態方法,如果你提供了一個實例:
class Foo
{
public static void f()
{
instanceMethod(); // Not OK - no instance provided.
this.instanceMethod(); // Not OK - no "this" in static methods.
new Foo().instanceMethod(); // OK because you provide an instance
}
public void instanceMethod() {}
}
4
因爲打電話給你不需要類,在這裏給你打電話需要非靜態方法的對象靜態方法,
的靜態方法與非哪裏靜態方法與狀態(對象)相關類相關
1
非靜態的方法是,在一個實例的上下文中執行的方法。沒有實例,調用它是沒有意義的,所以編譯器會阻止你這樣做 - 也就是說它是非法的。
如果一個方法不訪問任何實例字段(又名實例變量),那麼它可能應該改爲靜態方法。
0
非靜態方法有隱含參數this
其靜態方法都沒有(因爲沒有this
) 孤獨,因爲這實際上是不可能的調用非靜態方法形成靜態的。
0
靜態方法屬於該類。非靜態方法屬於一個實例。
非靜態方法需要在其上執行的實例(this
)。靜態方法不需要任何實例,因爲類本身就是它所屬的實例。
如果我有100個對象實例,則每個nonStatic()方法調用都會影響不同對象的狀態。因此,每個非靜態方法都是「不同的」,因爲它對不同的實體起作用。 同時,即使我有一個對象的實例,調用staticMethod()也不會影響任何這些實例,因爲它只能影響類的靜態成員。
每個靜態方法或靜態成員變量有1個類和1個實例。
對於非靜態成員,我們有與該類實例關聯的每一種方法。
所以,如果你能夠調用非靜態方法,從靜態方法,100個實例中的哪一個會受到影響?你看:它沒有意義。
0
靜態方法與類連接。 常規方法連接到對象。
在靜態方法中,沒有可以運行非靜態方法的對象。
0
從靜態方法調用非靜態方法並非非法。無論何時調用靜態方法,都不需要類的實例,而在非靜態的情況下,則可以。
相關問題
- 1. 非靜態調用靜態方法
- 2. 從Python中的靜態方法調用非靜態方法
- 3. 如何從靜態方法調用非靜態方法?
- 4. 如何從靜態方法調用非靜態方法
- 5. 如何從一個靜態方法調用非靜態方法
- 6. 從靜態Web方法調用ASP.NET頁面非靜態方法
- 7. 從靜態方法調用非靜態方法Objective C
- 8. 如何從靜態方法調用非靜態方法android
- 9. 從靜態方法調用非靜態方法
- 10. 從非靜態類動態調用非靜態方法的最簡單方法?
- 11. 非靜態方法無法從Android Studio中的非靜態方法調用
- 12. 從ShutdownHook調用非靜態方法
- 13. 有沒有辦法從靜態方法調用非靜態方法?
- 14. 調用非靜態方法動態
- 15. 從靜態調用非靜態方法的實例
- 16. 從非靜態的上下文調用靜態方法
- 17. 調用非靜態數組從靜態方法
- 18. 呼叫從靜態方法C#非靜態方法
- 19. 如何從靜態方法輸入非靜態方法
- 20. 從另一個靜態方法中調用靜態方法
- 21. 從靜態基類方法調用靜態派生類方法
- 22. Java錯誤:靜態方法無法引用非靜態方法
- 23. 無法調用非靜態方法
- 24. 如何從C#中的靜態方法調用非靜態方法?
- 25. 變量不會增加,從靜態方法調用非靜態方法
- 26. 從抽象類中的靜態方法調用非靜態方法(C++)
- 27. 非靜態的靜態方法
- 28. 靜態和非靜態方法工作
- 29. 靜態/非靜態方法參考
- 30. 靜態參照非靜態方法getBaseContext()
這不是非法的。從非靜態方法中,可以隱式地調用另一個實例爲「this」的實例。對於靜態方法,你必須顯式提供一個實例,因爲它沒有'this'實例。 –