本帖最后由 张向辉 于 2013-1-16 12:28 编辑
为什么急切初始化会比延迟初始化更早被初始化?如下代码:
public class Singleton {
Singleton1(){}
private final static Singleton sInstance=new Singleton();
public static Singleton getlnstance(){
return sInstance;
}
}
请问sInstance 的初始化发生在什么时候? 我理解它发生在getlnstance()函数被调用时。原因如下:
sInstance 的赋值对象不是一个常量(是一个变量,即Singleton()),所以它应该在自己被调用时才初始化。也就是getlnstance()调用时。
请问我的理解对吗?
在Effective java 中还提到一种延迟初始化的方式
public class Singleton {
Singleton1(){}
private static class SingletonHolder {
final static Singleton holder=new Singleton();
}
public static Singleton getlnstance(){
return SingletonHolder.holder;
}
}
在这种方式下 Singleton 的初始化时间也是getlnstance()调用时, 请问与前一种方式相比有什么好处呢?为什么这种方式就能达到延迟初始化的效果呢?
|