Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单例静态方法变量_Java_Methods_Static_Singleton_Field - Fatal编程技术网

Java 单例静态方法变量

Java 单例静态方法变量,java,methods,static,singleton,field,Java,Methods,Static,Singleton,Field,因此,我试图通过在字段中使用私有构造函数和私有静态最终新的单例类对象来创建一个单例对象 但我不知道这些方法是什么。所有的方法也需要是静态的吗?所有字段也需要是静态的吗 您的单例的单个实例已经是静态的,因此单例类的字段和方法都不需要是静态的。让静态成员来操作您的单例是没有意义的,因为单例模式旨在创建和返回类的单个实例 假设此代码: MySingleton.getInstance().foo(); 如果foo是静态的,为什么在调用foo之前调用getInstance? 实例无法调用静态方法。 所以

因此,我试图通过在字段中使用私有构造函数和私有静态最终新的单例类对象来创建一个单例对象


但我不知道这些方法是什么。所有的方法也需要是静态的吗?所有字段也需要是静态的吗

您的单例的单个实例已经是静态的,因此单例类的字段和方法都不需要是静态的。

让静态成员来操作您的单例是没有意义的,因为单例模式旨在创建和返回类的单个实例

假设此代码:

MySingleton.getInstance().foo();
如果foo是静态的,为什么在调用foo之前调用getInstance? 实例无法调用静态方法。 所以这就足够了:

MySingleton.foo();
但在这种情况下,这意味着不需要返回singleton实例,而只需要在后台由类本身进行操作。
singleton模式的目的不是确保一个类只有一个实例,并提供对它的全局访问点。从技术上讲,创建singleton有两种方法

创建一个没有可用构造函数的完全静态类

public final class StaticSingelton{

  private final static String readOnlyField = "readMe";
  private int static writeOnlyField = -1;
  private double static readAndWriteField = -1;

  private StaticSingelton(){
    throw new IllegalAccessException();
  }

  public final static String getReadOnlyField(){
  return readOnlyField;
  }
  public final static void setWriteOnlyField(final int value){
  writeOnlyField = value;
  }
  public final static double getReadAndWriteField(){
  return readAndWriteField;
  }
  public final static void setReadAndWriteField(final double value){
  readAndWriteField = value;
  }

}
创建一个只能存在一个实例的类,并允许访问该类 公共最终类实例Singelton{

private final static InstanceSingelton instance = new InstanceSingelton();

  private final String readOnlyField = "readMe";
  private int writeOnlyField = -1;
  private double readAndWriteField = -1;

private InstanceSingelton(){
  if(instance != null){
    throw new IllegalAccessException();
  }
}

  public final static InstanceSingelton getInstance(){
     return instance;
  }

  public final String getReadOnlyField(){
  return readOnlyField;
  }
  public final void setWriteOnlyField(final int value){
  writeOnlyField = value;
  }
  public final double getReadAndWriteField(){
  return readAndWriteField;
  }
  public final void setReadAndWriteField(final double value){
  readAndWriteField = value;
  }
}


除非你个人出于某种原因需要一个对象实例,否则我想不出在功能上有什么不同。

单例模式是一种反模式,在web上的许多地方都有非常好的记录。他们在某种程度上不为你工作吗?任何/所有这些样品都有什么让人困惑的地方?吉姆,没必要这么小题大做。我遇到的那些是非常短的,没有字段或方法。仅仅是一个骨架,以获得基本的模式。如果你真的要努力打字,你也可以直接输入用户lexicore所做的事情,这实际上很有帮助,而且需要减少35%的输入量。关键是你需要在发帖之前进行认真的研究。提醒你那件事并不刺耳。