在java类中创建实例

ala*_*ine 3 java singleton constructor

请告诉我两种java构造函数声明方式的区别

  public class A{

    private static A instance = new A();
    public static A getInstance() { return instance;
        }
    public static void main(String[] args) {
          A a= A.getInstance();
        }
 }
Run Code Online (Sandbox Code Playgroud)

    public class B{
    public B(){};


     public static void main(String[] args) {
     B b= new B();
     }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

bak*_*kal 11

  • A应该是Singleton,其中只能有一个A实例.通过调用检索该单个实例getInstance();

在软件工程中,单例模式是一种设计模式,用于通过将类的实例化限制为一个对象来实现单例的数学概念.当需要一个对象来协调整个系统的操作时,这非常有用.

根据您的要求,有几种方法可以解决这个问题:

public class A{
    private static A instance = new A();
    private A(){} // private constructor
    public static A getInstance() {return instance;}
}
Run Code Online (Sandbox Code Playgroud)

或者在第一次调用之前不创建实例

public class A{
    private static A instance = null;
    private A(){} // private constructor
    public static A getInstance() {
        if(instance == null){
           instance = new A(); // create the one instance.
        }
        return instance;
    }
}
Run Code Online (Sandbox Code Playgroud)
  • Class B是一个带有无参数构造函数的类.您可以通过调用创建任意数量的B实例new B();


Chr*_*ris 5

看起来A是尝试实现单例模式,但它不太正确 - 它应该有一个私有构造函数:

class A {
 private static final A INSTANCE = new A();
 private A() { }
 public static A getInstance() { return INSTANCE; }
}
Run Code Online (Sandbox Code Playgroud)

这确保了应用程序中只存在一个A实例 - 如果任何其他对象需要使用A的实例来执行某些操作,则唯一可以通过该getInstance()方法获取一个实例,该方法始终返回相同的实例.

使用B,您可以根据需要/期望拥有尽可能多的B实例,如果选择,任何其他对象都可以自由创建B的新实例.