对象可以有访问修饰符吗?

时间:2012-05-08 15:27:56

标签: java oop

当我遇到这个时,我正在阅读一段代码:

public class ClassicA {
   private static ClassicA instance = null;
}

我从未使用过这样的东西,想知道它意味着什么以及如何使用它。此外,对象的访问修饰符的目的是什么?欢迎提供任何示例/链接。

7 个答案:

答案 0 :(得分:4)

这可能意味着ClassicA是一个单身人士。它通常涉及声明私有构造函数和单个公共静态getInstance()方法。

当您想要确保整个应用程序中只有一个ClassicA的全局实例时,会使用单身人士。您可以调用getInstance()而不是实例化它,这将检查它是否已实例化一次。如果是,它将实例化它,并将结果对象存储在私有instance字段中。如果它已经构造,只需返回instance字段而不重新实例化。

请注意,这被认为是不好的做法。请参阅:https://softwareengineering.stackexchange.com/questions/40373/so-singletons-are-bad-then-what

答案 1 :(得分:3)

好的,类ClassicA有一个私有和静态字段instance,它是null。 如果没有getter / setter,访问该字段的唯一方法是使用反射。

由于这看起来像一个单身人士,我想还有一个getter返回instance,如果它是null,则首先创建一个实例并将其分配给该字段。

答案 2 :(得分:1)

它的singleton 基本上作者打算只有这个类的1个实例(实例字段) 构造函数可能是私有的,只在类中使用。

答案 3 :(得分:1)

它是班级的(静态)成员,是的,these can have access modifiers。 (正如其他人所指出的,它确实看起来像是单身人士的一部分。)

答案 4 :(得分:1)

这通常用于展示Singleton design pattern

的类

重点是,对于这些类型的对象,您最多只需要一个实例。你要做的是为类创建一个私有构造函数,然后通常是一个名为getInstance的公共静态方法,在其中检查是否已经设置了私有实例变量。如果尚未设置,则创建该类的新实例并将其分配给实例,然后返回该实例。如果对象已经创建,您只需返回它。像这样:

public class MySingleton {

  private static MySingleton instance=null;
  private MySingleton() {
     //do stuff
  }

  public static MySingleton getInstance() {
    if (instance == null) {
       instance = new MySingleton();

    }
    return instance;
  }

}

然后,从整个程序中,您可以轻松地从任何地方获取单例对象。

因此,单例实际上只是PHP等语言中的一个美化全局变量。我认为它会更加清晰,因为你可以阻止其他人重新分配对实例的引用以及从设计角度来看可能非常糟糕的其他技巧。

通常人们将它用于管理某些类型的数据访问的类,例如DB对象,用于Factory类和构建器类,有关详细信息,请参阅this

答案 5 :(得分:0)

这用于单身模式。见here

答案 6 :(得分:0)

private static表示instance可用于类的所有实例和静态方法,但仅适用于它们。它实际上就像拥有静态私有方法。

此类技巧可用于实现单例:您在内部保留一个类的单个实例,并且可以根据需要将其提供给类的客户端。或者对于任何其他情况,当您需要在静态方法和某个类的实例之间共享某些内容时。