私有构造函数可以用来构造一个只能被实例化一次的类。下面是一段代码:
class Elvis implements Serializable{
private static final Elvis instance = new Elvis();//这是唯一的类实例。
private int data;
private Elvis(){
data = 0;
}
//使用了静态工厂方法。
public static Elvis getInstance(){
return instance;
}
public void setData(int value){
data = value;
}
public int getData(){
return data;
}
private Object readResolve() throws ObjectStreamException{//重写此函数以保证反序列化后得到的是同一个实例。
return instance;
}
}
public class singleton{
public static void main(String[] args) {
Elvis elvis = Elvis.getInstance();
elvis.setData(2);//获取一个类实例,并修改类成员。
Elvis elvis_2 = Elvis.getInstance();
int value = elvis_2.getData();
System.out.println(value);//可以看到其他的引用都指向一个类实例。
}
}