【问题标题】:Can public static class name variable be called without object可以在没有对象的情况下调用公共静态类名变量吗
【发布时间】:2016-10-22 05:51:44
【问题描述】:
public class StateCacheManager {
    public static StateCacheManager mInstance;
}

我的问题是变量mInstance 可以在没有对象的情况下调用吗?如果不是,那么上述说法的意义何在?

【问题讨论】:

    标签: java oop static


    【解决方案1】:

    static 关键字标识了可以在不构造实例的情况下访问的类元素。您可以使用类名作为限定符来访问它们。

    在这种情况下你可以写StateCacheManager.mInstance

    【讨论】:

      【解决方案2】:

      mInstanceStateCacheManager 类的对象。这个类只有一个对象。

      下面应该有一个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 的模式。

      【讨论】:

        【解决方案3】:

        如果使用static 修改了某些内容(方法、字段、内部类等),则可以使用其名称访问它,并带有ClassName. 后缀。

        所以你的mInstance 变量可以这样访问:

        StateCacheManager.mInstance
        

        如您所见,我没有创建任何对象来访问它,因此您的第一个问题的答案是“是”。

        但是,您可能应该创建 mInstance 变量 private 并添加一个 getter:

        public static StateCacheManager mInstance = new StateCacheManager();
        public StateCacheManager getInstance() { return mInstance; }
        

        这是为了防止您的代码的其他用户,或困倦的您,不小心将mInstance 设置为您不想要的其他值。

        这称为单例模式。当您只想存在一个类的一个实例时使用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-05
          • 2021-12-30
          • 1970-01-01
          • 1970-01-01
          • 2018-10-09
          相关资源
          最近更新 更多