为了保证类在内存中只能有一个对象,构造函数需要private外面不实例化对象,提供一个公共方法返回一个实例
//饿汉式
class Single{
//需要是static的,getInstance方法才能访问,因为静态方法不能访问非静态变量
private static Single s = new Single();
private Single(){}
//因为构造函数是private的,外面无法创建实例,所以下面方法需要是static的外面才能通过类名访问
public static Single getInstance(){
return s;
}
}
//懒汉式
class Single{
//需要是static的,getInstance方法才能访问,因为静态方法不能访问非静态变量
private static Single s = null;
private Single(){}
//因为构造函数是private的,外面无法创建实例,所以下面方法需要是static的外面才能通过类名访问
public static Single getInstance(){
if(s==null)
{
synchronized(Single.class) //因为可能存在线程安全问题
{
if(s==null)
s = new Single();
}
}
return s;
}
}
//测试
public static void main(String[] args)
{
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
System.out.print(s1==s2); //true
}