今天在写单例模式模式中,突然想到一个问题,为啥静态变量中创建自己一个对象,不会造成对象创建死循环,仔细一想,恍然大悟.
饿汉式单例代码
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
System.out.println("初始化");
};
public static Singleton getInstance() {
return INSTANCE;
}
}
首先,要明白的是静态代码只会在类加载的时候初始化一次,是对所有类共享的,因此,所以当对象创建了一次之后,静态代码就不再初始化,静态变量中就不会重复创建对象了.相反的,如果以下情况就会出死循环问题了
public class Singleton {
private Singleton instance = new Singleton();
private Singleton() {
System.out.println("初始化");
};
public static void main(String[] args) {
new Singleton();
}
}
成员变量不是对所有类共享的,因此在创建对象初始化过程中,成员变量需要创建一个新的对象,此时这个新的对象中的成员变量又需要创建一个新的对象,新的对象又要创建一个新的对象,如此反复,就会造成死循环,报StackOverflowError