【发布时间】:2016-10-22 05:51:44
【问题描述】:
public class StateCacheManager {
public static StateCacheManager mInstance;
}
我的问题是变量mInstance 可以在没有对象的情况下调用吗?如果不是,那么上述说法的意义何在?
【问题讨论】:
public class StateCacheManager {
public static StateCacheManager mInstance;
}
我的问题是变量mInstance 可以在没有对象的情况下调用吗?如果不是,那么上述说法的意义何在?
【问题讨论】:
static 关键字标识了可以在不构造实例的情况下访问的类元素。您可以使用类名作为限定符来访问它们。
在这种情况下你可以写StateCacheManager.mInstance
【讨论】:
mInstance 是 StateCacheManager 类的对象。这个类只有一个对象。
下面应该有一个getInstance方法来初始化mInstance。
public class StateCacheManager {
public static StateCacheManager mInstance;
public StateCacheManager getInstance(){
if(mInstance == null){
mInstance = new StateCacheManager();
}
return mInstance;
}
}
这就是你使用它的方式,
StateCacheManager object = StateCacheManager.getInstance();
此类使用称为Singleton Pattern 的模式。
【讨论】:
如果使用static 修改了某些内容(方法、字段、内部类等),则可以使用其名称访问它,并带有ClassName. 后缀。
所以你的mInstance 变量可以这样访问:
StateCacheManager.mInstance
如您所见,我没有创建任何对象来访问它,因此您的第一个问题的答案是“是”。
但是,您可能应该创建 mInstance 变量 private 并添加一个 getter:
public static StateCacheManager mInstance = new StateCacheManager();
public StateCacheManager getInstance() { return mInstance; }
这是为了防止您的代码的其他用户,或困倦的您,不小心将mInstance 设置为您不想要的其他值。
这称为单例模式。当您只想存在一个类的一个实例时使用它。
【讨论】: