在java类中创建实例

时间:2010-06-08 02:26:26

标签: java constructor singleton

请告诉我两种声明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();
        }
 }

    public class B{
    public B(){};


     public static void main(String[] args) {
     B b= new B();
     }
}

由于

3 个答案:

答案 0 :(得分:11)

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

在软件工程中,单身   模式是一种用于的设计模式   实现数学概念   单身,通过限制   将类实例化为一个   对象即可。当完全正确时,这很有用   协调需要一个对象   整个系统的行动。

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

public class A{
    private static A instance = new A();
    private A(){} // private constructor
    public static A getInstance() {return instance;}
}

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

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;
    }
}
  • B是一个带有无参数构造函数的类。您可以通过调用new B();
  • 创建任意数量的B实例

答案 1 :(得分:5)

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

class A {
 private static final A INSTANCE = new A();
 private A() { }
 public static A getInstance() { return INSTANCE; }
}

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

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

答案 2 :(得分:0)

在第一种情况下,只有一个实例可用。在第二种情况下,可以拥有尽可能多的人。在第一种情况下,您需要将构造函数设为私有。