public class Singleton {
private static Singleton singleton =new Singleton();
private Singleton(){
System.out.println("1");
}
public static Singleton getInstance(){
return singleton;
}
}
——————————————————————————————————————————————
我的理解是,第一次调用getInstance()时,类被加载,静态变量singleton被初始化,在初始化时调用了构造函数,所以此时输出1
而在第二次调用getInstance()时,因为是静态的,不会再被初始化,也就不会调用构造函数,所以1只会被输出一次,不知道我的理解对不对,请指教
private static Singleton singleton =new Singleton();
private Singleton(){
System.out.println("1");
}
public static Singleton getInstance(){
return singleton;
}
}
——————————————————————————————————————————————
我的理解是,第一次调用getInstance()时,类被加载,静态变量singleton被初始化,在初始化时调用了构造函数,所以此时输出1
而在第二次调用getInstance()时,因为是静态的,不会再被初始化,也就不会调用构造函数,所以1只会被输出一次,不知道我的理解对不对,请指教
private volatile static Singleton instance; //声明成 volatile
private Singleton (){} public static Singleton getSingleton() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}}
由于getInstance方法是静态的,所以第一次访问这个静态方法时,类便会加载,singleton也就被实例化,输出1;第二次访问,类已经加载过了,便不会再次加载,也就不会输出1了