有什麼辦法來調用公共非靜態變量或方法沒有實例及其級的Java ...呼籲公衆「非靜態」變量或方法沒有實例其
回答
在Java中,沒有辦法調用非靜態變量,即沒有instance
的實例成員。
有一個原因,從Understanding Instance and Class Members
當同一類藍圖創造了多個對象,他們每個人都有實例變量自己獨特的副本。
凡爲靜態方法屬於類沒有具體instance
不是那不是可能的,你不能說與出創造instance.but非靜態方法,如果你不想創建實例,並希望直接調用,然後讓這些方法爲靜態
沒有,因爲它違背了靜態
你需要一個對象來調用非靜態方法的根本目的,但它並沒有成爲的對象類定義方法 - 它也可以是該類的子類的對象。
如果您很難將手放在該類的某個對象上,這很有用 - 例如,如果構造函數的參數很難獲取且不能清零,或者您需要創建對象在另一個對象中很難獲取自己的方法。在這些情況下,您可以使用自己的類來擴展類,該類具有更簡單的構造函數,可以創建該子類的對象並自己調用它。
請記住,這種方法是駭人而危險的,它違反了OOP的核心原則。你的子類跳過了它所擴展的類的定期構造,並且由於構建過程非常複雜(如果不是,你只需要直接實例化),你可以確信原始構建過程非常重要,而且有些 - 如果不是大多數 - 該對象的功能將無法正常工作:如果幸運的話會拋出異常,如果您不那麼幸運,則可能會產生不良結果甚至損壞其他對象。即使這種方法需要使用這種方法正確工作,但未來對該類的更改可能會使該方法依賴於正確的構造,並且會破壞您的代碼。
所以 - 使用需要您自擔風險!
public class MyNewClass extends ClassWithNonStaticMethod{
public MyNewClass(){
//Not doing proper construction
}
}
//somewhere in your code:
new MyNewClass().nonStaticMethod();
不,這沒有意義調用一個實例變量沒有一個實例。
要回答你的問題,不,你不能。 Java不是爲了讓你這麼做而設計的。
但是,我認爲更重要的是要問:爲什麼你覺得你需要這樣做?
如果您無法控制此類(即,它的庫類),並且您認爲需要這樣做,那麼您可能是錯誤地使用了該庫。
如果您可以修改該類,請將其設爲靜態。
- 1. 實例變量或靜態變量?
- 2. 公開具有非靜態公共最終變量的實例常量
- 3. 通過非靜態方法更改公共靜態變量
- 4. 靜態方法的Java實例變量
- 5. 呼籲公衆解釋與參數
- 6. 不能applet中擺動UI工作 - 呼籲公衆方法
- 7. 呼籲公衆窗戶方法形成application.run
- 8. Android Studio靜態或非靜態變量和方法
- 9. Subscriber類沒有公有方法呼籲事件
- 10. 方法和變量有非靜態需要是靜態錯誤
- 11. 創建一個沒有實例/靜態變量的增量方法?
- 12. 呼叫從靜態方法C#非靜態方法
- 13. 在靜態方法中使用非靜態變量或調用非靜態方法(使用對象實例訪問)是否是一種很好的做法?
- 14. 創建新的實例或使用公共靜態方法?
- 15. 分配實例變量靜態變量
- 16. 需要在靜態和非靜態方法中使用實例
- 17. 從靜態調用非靜態方法的實例
- 18. 非靜態私有變量
- 19. 錯誤靜態方法需要空實例,非靜態方法需要非空實例
- 20. 靜態方法vs靜態實例
- 21. 公共靜態變量或使用意圖類的putExtra方法
- 22. 有沒有辦法讓靜態方法訪問一個類的所有非靜態實例?
- 23. 如何使公共靜態方法可以訪問實例變量?
- 24. 只有公共靜態方法與實例化類的類
- 25. 在對象實例中使用實例變量或靜態變量,這些變量或靜態變量只會一次實例化,不會從外部訪問?
- 26. 靜態方法或實例方法中的實際代碼
- 27. 從靜態方法訪問非靜態成員變量
- 28. 靜態方法來分配非靜態變量
- 29. 從C++中的靜態方法訪問非靜態類變量
- 30. 非靜態方法可以修改靜態變量
爲什麼你不使用靜態方法? –
不。沒有。 – azz