请告诉我两种声明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();
}
}
由于
答案 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();
答案 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)
在第一种情况下,只有一个实例可用。在第二种情况下,可以拥有尽可能多的人。在第一种情况下,您需要将构造函数设为私有。