2010-11-09 90 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(); 

但是,如果你打算做这个有很多,它可能以这种方式继续创建和销毁对象变得效率低下。

更好的办法可能是实例化一个对象,比如在你自己的类构造函数中,并且只需要在你需要调用该方法时使用它。假如它不需要每次都有新的初始化对象,那可能会更有效率。

但是,您可能还想记住,可能有一个原因为什么该方法不是静态的(尽管我在上面的类和方法名称中没有那么微妙的戳)。确保在创建新实例时不需要设置某些状态。换句话说,不要盲目地尝试这样做而不理解。

相关问题