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

Java 对象可以有访问修饰符吗?,java,oop,Java,Oop,当我在浏览一段代码时,我发现: public class ClassicA { private static ClassicA instance = null; } 我从来没有用过这样的东西,我想知道它是什么意思以及如何使用它。此外,对象的访问修改器的用途是什么?欢迎提供任何示例/链接。这是一个 基本上,作者希望在实例字段中只有一个此类的实例处于活动状态 构造函数可能是私有的,只在类中使用。它是一个 基本上,作者希望在实例字段中只有一个此类的实例处于活动状态 构造函数可能是私有的,只在类

当我在浏览一段代码时,我发现:

public class ClassicA {
   private static ClassicA instance = null;
}
我从来没有用过这样的东西,我想知道它是什么意思以及如何使用它。此外,对象的访问修改器的用途是什么?欢迎提供任何示例/链接。

这是一个 基本上,作者希望在实例字段中只有一个此类的实例处于活动状态 构造函数可能是私有的,只在类中使用。

它是一个 基本上,作者希望在实例字段中只有一个此类的实例处于活动状态
构造函数可能是私有的,只在类中使用。

它是类的静态成员,是的。正如其他人所注意到的,它确实看起来像是单例的一部分。

它是类的静态成员,是的。正如其他人所指出的,它确实看起来像是单例模式的一部分。

这用于单例模式。请参见

这用于单例模式。请看

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

当您希望确保整个应用程序中只有一个ClassicA全局实例时,可以使用单例。不是实例化它,而是调用getInstance,它将检查它是否实例化过一次。如果是,它将实例化它,并将结果对象存储在private instance字段中。如果已经构造了实例字段,只需返回实例字段,而无需重新实例化

请注意,这被认为是不好的做法。请参阅:

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

当您希望确保整个应用程序中只有一个ClassicA全局实例时,可以使用单例。不是实例化它,而是调用getInstance,它将检查它是否实例化过一次。如果是,它将实例化它,并将结果对象存储在private instance字段中。如果已经构造了实例字段,只需返回实例字段,而无需重新实例化

请注意,这被认为是不好的做法。请参阅:

好吧,ClassicA类有一个私有的静态字段实例,该实例为null。 如果没有getter/setter,那么访问该字段的唯一方法就是使用反射

因为这看起来像是一个单例,我猜还有一个getter返回instance,如果它为null,则首先创建一个实例并将其分配给字段。

好吧,ClassicA类有一个私有的静态字段实例,它为null。 如果没有getter/setter,那么访问该字段的唯一方法就是使用反射

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

private static意味着该实例可用于该类的所有实例和静态方法,但仅限于它们。这实际上就像拥有静态私有方法一样

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

私有静态意味着该实例可用于该类的所有实例和静态方法,但仅限于它们。这实际上就像拥有静态私有方法一样


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

这通常用于显示

关键是,对于这些类型的对象,您最多只需要一个实例。您要做的是为类创建一个私有构造函数,然后通常创建一个名为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;
  }

}
然后,在整个程序中,您可以轻松地从任何地方获取singleton对象

因此,在PHP等语言中,单例实际上只是一个美化的全局变量。我想说的是,它要干净得多,因为您可以防止其他人重新分配对实例的引用和其他从设计角度看可能非常糟糕的欺骗

通常,人们将其用于管理某种类型的数据访问的类,如DB对象,对于Factory类和builder类,请参阅以获取更多信息 sed通常用于显示

关键是,对于这些类型的对象,您最多只需要一个实例。您要做的是为类创建一个私有构造函数,然后通常创建一个名为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;
  }

}
然后,在整个程序中,您可以轻松地从任何地方获取singleton对象

因此,在PHP等语言中,单例实际上只是一个美化的全局变量。我想说的是,它要干净得多,因为您可以防止其他人重新分配对实例的引用和其他从设计角度看可能非常糟糕的欺骗



通常,人们将其用于管理某些类型的数据访问的类,例如用于Factory类和builder类的DB对象,请参阅以获取更多信息

可能在该类中有一个用于实例的静态getter。可能在该类中有一个用于实例的静态getter。如果您只写一点描述,而不仅仅是发布一个链接,通常会更有帮助。如果您只写一点描述,通常会更有帮助,严格来说,这并不意味着这个类是单例的:可能有一个公共构造函数。我假设类源代码不完整,否则就没有多大意义。@Vlad:Added。谢谢。@Truth:谢谢,我得到了它,因此删除了我的评论:-严格来说,这并不意味着这个类是单例的:可能有一个公共构造函数。我假设类源代码不完整,否则就没有多大意义。@Vlad:Added。谢谢。@Truth:谢谢,我得到了答案,因此删除了我的评论:-我希望10k用户给出更好的答案。@juergend:在这种情况下,你不会给出不完整的答案。我希望10k用户给出更好的答案。@juergend:在这种情况下,你不会给出不完整的答案。公共同步化?或者只使用synchronizedMySingleton.class?关于getInstance?这就可以了,两者本质上是等价的,尽管这会增加一个同步瓶颈,这可能不是什么大问题。另一种方法是这样做——但请特别注意,需要将实例设置为易变的。但最好的方法可能是根本不延迟加载:private static MySingleton instance=new MySingleton。初始值设定项本身是延迟加载的,它只在加载类时运行,也就是您第一次使用它时,这应该足够好了。public syncrhonized?或者只使用synchronizedMySingleton.class?关于getInstance?这就可以了,两者本质上是等价的,尽管这会增加一个同步瓶颈,这可能不是什么大问题。另一种方法是这样做——但请特别注意,需要将实例设置为易变的。但最好的方法可能是根本不延迟加载:private static MySingleton instance=new MySingleton。初始值设定项本身是延迟加载的,它只在加载类时运行,也就是您第一次使用它时,这应该足够好了。