先看代码:
public class Singleton{
private Singleton singleton = new Singleton();
private Singleton(){
}
private Singleton getInstance(){
return singleton;
}
}
这段代码为什么能在jvm里只生成一个实例?
public class Singleton{
private Singleton singleton = new Singleton();
private Singleton(){
}
private Singleton getInstance(){
return singleton;
}
}
这段代码为什么能在jvm里只生成一个实例?
public class Singleton{
private Singleton singleton = new Singleton();
private Singleton(){
}
public Singleton getInstance(){
return singleton;
}
}
private Singleton 改成 public Singleton
public class Singleton{
private static Singleton singleton = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return singleton;
}
}
因为构造函数是私有的,你不能通过new Singleton()来创建实例,只能通过一个静态公有的成员函数获得实例(必须是静态的,因为静态方法是属于类的,用类.方法就可访问),而且singleton是一个静态的成员,只会产生一个实例。
二楼正确...这种方式叫饿狗式其实还有一种方式的Singleton写法,与此有点区别的...这种方式叫懒汉式
public class Singleton
{
private static Singleton singleton = null;
private Singleton(){
}
public static Singleton getInstance()
{
if( singleton == null)
{
singleton = new Singleton();
}
return singleton;
}
}
因为static 变量 在访问此类的时候会初始化
然后一直存在这个实例public class Singleton{
private static Singleton singleton = new Singleton();
private Singleton(){
}
private Singleton getInstance(){
return singleton;
}
}
--------------------------------------------------------------------------------------------------------------------------------
两个对象指向同一块内存.
单例模式 ...只能有一个实例
static属于共享的资源.
private static Singleton singleton=null;
private Singleton{
}
public static Singleton getSingleton{
if(singleton==null){
singleton=new Singleton();
}
return singleton;
}
}
private static Singleton singleton=null;
private Singleton{
}
public static Singleton getSingleton{
if(singleton==null){
singleton=new Singleton();
}
return singleton;
}
}类似这种代码都是不是最佳的。baidu 双检锁。另外在naming上不要那么死心眼都getInstance
public static Object instance() {
}这样不就得了。此外,还有,所有的Singleton都是一个模式的,应该学会用模版封装,这才能体现泛型的价值 唉
这是阎博士说的....具体咋回事没具体看..........
回楼主,当定义一个类的成员为static时,该类所有的对象共享这一个成员再加上把构造器定义为private 所以在该类的外面是不能构造该类的对象的所以这种模式叫单例模式
private static Singleton singleton=null;
private Singleton{
}
public static Singleton getSingleton{
if(singleton==null){
synchronized (Singleton.class){
if(singleton == null)
singleton = new Singleton();
}
}
return singleton;
}
}