2013-10-30 24 views

回答

8

在Java中,沒有辦法調用非靜態變量,即沒有instance的實例成員。

有一個原因,從Understanding Instance and Class Members

當同一類藍圖創造了多個對象,他們每個人都有實例變量自己獨特的副本。

凡爲靜態方法屬於類沒有具體instance

1

不是那不是可能的,你不能說與出創造instance.but非靜態方法,如果你不想創建實例,並希望直接調用,然後讓這些方法爲靜態

2

沒有,因爲它違背了靜態

1

你需要一個對象來調用非靜態方法的根本目的,但它並沒有成爲的對象類定義方法 - 它也可以是該類的子類的對象。

如果您很難將手放在該類的某個對象上,這很有用 - 例如,如果構造函數的參數很難獲取且不能清零,或者您需要創建對象在另一個對象中很難獲取自己的方法。在這些情況下,您可以使用自己的類來擴展類,該類具有更簡單的構造函數,可以創建該子類的對象並自己調用它。

請記住,這種方法是駭人而危險的,它違反了OOP的核心原則。你的子類跳過了它所擴展的類的定期構造,並且由於構建過程非常複雜(如果不是,你只需要直接實例化),你可以確信原始構建過程非常重要,而且有些 - 如果不是大多數 - 該對象的功能將無法正常工作:如果幸運的話會拋出異常,如果您不那麼幸運,則可能會產生不良結果甚至損壞其他對象。即使這種方法需要使用這種方法正確工作,但未來對該類的更改可能會使該方法依賴於正確的構造,並且會破壞您的代碼。

所以 - 使用需要您自擔風險!

public class MyNewClass extends ClassWithNonStaticMethod{ 
    public MyNewClass(){ 
     //Not doing proper construction 
    } 
} 

//somewhere in your code: 
new MyNewClass().nonStaticMethod(); 
+0

我可以得到上述邏輯的psuedocode嗎? – TMKS

+0

已將此代碼添加到答案 –

+0

我使用上面的代碼從ClassWithNonStaticMethod訪問getter(),但getter()返回null,我沒有從ClassWithNonStaticMethod類獲取值 – TMKS

2

不,這沒有意義調用一個實例變量沒有一個實例。

1

要回答你的問題,不,你不能。 Java不是爲了讓你這麼做而設計的。

但是,我認爲更重要的是要問:爲什麼你覺得你需要這樣做?

如果您無法控制此類(即,它的庫類),並且您認爲需要這樣做,那麼您可能是錯誤地使用了該庫。

如果您可以修改該類,請將其設爲靜態。

相關問題