class Single{
//一加载类,对象就已经存在了
private static Single s = new Single(); private Single(){} public static Single getInstance(){
return s ;
}
}class SingleDemo{
public static void main(String[] args){
Single s1 = Single.getInstance();
Single s2 = Single. getInstance();
System.out.println(s1 == s2);
}
}对单例设计模式,一直有好些个疑惑没有解开......类都没有写完,都没有出花括号!怎么能在还没写完自己的时候,就用自己呢?
类加载中,怎么还能new对象,建立对象不是类加载完后的事吗?如果是这样的话,我能不能在这个静态方法里调用this,它这里有对象,是不是也就有this!像这个,还有递归,等等...它们一次又一次挑战自己理解的底线,每次看到这些,大脑中的本能反应就是“怎么还可以这样!”
//一加载类,对象就已经存在了
private static Single s = new Single(); private Single(){} public static Single getInstance(){
return s ;
}
}class SingleDemo{
public static void main(String[] args){
Single s1 = Single.getInstance();
Single s2 = Single. getInstance();
System.out.println(s1 == s2);
}
}对单例设计模式,一直有好些个疑惑没有解开......类都没有写完,都没有出花括号!怎么能在还没写完自己的时候,就用自己呢?
类加载中,怎么还能new对象,建立对象不是类加载完后的事吗?如果是这样的话,我能不能在这个静态方法里调用this,它这里有对象,是不是也就有this!像这个,还有递归,等等...它们一次又一次挑战自己理解的底线,每次看到这些,大脑中的本能反应就是“怎么还可以这样!”
类加载时会对静态变量进行初始化
private static Single s = new Single();
而初始化时会间接初始化对象
这个new并不会创建变量s,不会去管理静态变量,也不会去调用除构造函数以外的任何方法(除非构造函数里去调了其他方法)
只会引起非静态变量的初始化,这里没有,所以你可以认为new了一个没数据的对象而已
而这个对象的引用是又s持有的