2010-11-09 84 views
2

我正在使用一個包含非靜態方法調用的包。 它不會讓我從靜態上下文中調用此方法。 我無法更改非靜態方法,我該如何調用此方法?Java靜態上下文

+1

你學了多少Java?看起來你會從閱讀一些基本的Java教程中受益。 – jjnguy 2010-11-09 01:44:55

+0

http://download.oracle.com/javase/tutorial/ – jjnguy 2010-11-09 01:45:25

回答

5

從該類中創建一個對象並調用該對象的方法?

import com.acme.myclass; 

... 

MyClass obj = new MyClass(); 
obj.nonStaticMethod(); 

如果您正在使用的包有任何文件,一定要看看通過它來了解您的預計使用類及其非靜態方法。您可能還想了解更多關於面向對象編程中的靜態和非靜態的更多信息,以更好地瞭解這些差異。

+0

當然,如果你需要的只是調用這個方法並忘記它,那麼就像jjnguy建議的那樣,new MyClass()。nonStaticMethod();'會做。 – BoltClock 2010-11-09 01:40:41

+2

打我一秒。 – jjnguy 2010-11-09 01:42:15

5

爲了調用非靜態方法,您必須調用對象實例的方法。

考慮下面的類:

public class MyClass { 
    public void nonStaticMethod(); 
} 

你會調用該方法,像這樣:

new MyClass().nonStaticMethod(); 

或者,如果你需要調用該方法不止一次,你可以將它保存到一個目的。

MyClass instance = new MyClass(); 
instance.nonStaticMethod(); 
... 
instance.nonStaticMethod(); 
0

靜態方法不需要實例化,而實例方法在實例類內部實現。

要獲得實例方法,首先需要使用new關鍵字的類實例。然後你可以訪問這個類的實例方法。

1

該方法屬於一個類。

所以,你需要做的是創建一個類的實例(與新的運營商最有可能的),然後使用它:

package a; 

class A { 
    public void theMethod(){ 
    } 
} 

..... 
package b; 
import a.A; 
class Main { 
    public static void main(String [] args) { 
     A a = new A(); 
     a.theMethod(); 
    } 
} 
0

非靜態(實例)不能從靜態稱爲上下文。其他方式是可能的。

1

每當你需要調用非靜態方法可以實例化類的一個對象,喜歡的東西:

new BadlyWrittenClass().BadlyWrittenMethod(); 

但是,如果你打算做這個有很多,它可能以這種方式繼續創建和銷燬對象變得效率低下。

更好的辦法可能是實例化一個對象,比如在你自己的類構造函數中,並且只需要在你需要調用該方法時使用它。假如它不需要每次都有新的初始化對象,那可能會更有效率。

但是,您可能還想記住,可能有一個原因爲什麼該方法不是靜態的(儘管我在上面的類和方法名稱中沒有那麼微妙的戳)。確保在創建新實例時不需要設置某些狀態。換句話說,不要盲目地嘗試這樣做而不理解。

相關問題