如何从java中的静态方法访问非静态成员?

时间:2011-09-22 23:43:17

标签: java static

我有一种情况,我必须从静态方法中访问非静态成员。我可以使用新实例访问它,但当前状态将丢失,因为非静态成员将被重新初始化。如何在不丢失数据的情况下实现这一目标?

5 个答案:

答案 0 :(得分:2)

也许你想要一个singleton。然后,您可以从静态方法中获取该类的(唯一)实例并访问其成员。

基本理念是

public class Singleton {
  private static Singleton instance = null;

  private Singleton() {}

  public static Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
  }
}

然后用一些静态方法:

public static someMethod() {
    Singleton s = Singleton.getInstance();
    //do something with s
}

答案 1 :(得分:1)

你所要求的并没有多大意义。只需使您的方法非静态,因为静态方法不能绑定到实例。

答案 2 :(得分:0)

静态方法不适用于特定的实例/对象,它们是类级别的东西。因此,他们不是给予实例引用。所以,不,你不能这样做。

如果您可以使用其他方式计算哪个实例引用,则可以访问它的非静态方法。

或者,或者,重新设计您的类,使其成为非静态方法。

答案 3 :(得分:0)

你做不到。静态方法与任何特定状态(也称为任何非静态成员)无关。换句话说,它们独立于类的任何特定实例运行,因此它们不能依赖于非静态成员。

答案 4 :(得分:0)

非静态成员变量“is state”。它是该类的特定实例的状态

当您说要访问非静态成员变量时,它就像说“想要访问类XXX的特定实例的非静态成员变量”,我的意思是粗体部分是含蓄的。

因此说“我可以使用新实例访问它”没有意义。