class DanTai{
static DanTai Dan = new DanTai();
int i = 0;
private DanTai()
{
System.out.println("DanTai");
}
public static DanTai Fanhui()
{
return Dan;
}
}
public class Dantaimoshi{
public static void main(String[] args)
{
System.out.println(DanTai.Fanhui().i);
}
}
我们给静态变量dan赋值的时候应该是只赋值一次,但是我有点不太明白。
当给dan赋值的时候 会产生一个新的DanTai对象,同时又产生一个静态的dan变量,我知道静态变量是共享一块内存的,所以认为每次产生的静态变量都是同一块内存,而dan的值是不断被新的句柄覆盖。我知道这种想法是错的,请各位知情者告知原因,尽量详细点 小弟谢了
static DanTai Dan = new DanTai();
int i = 0;
private DanTai()
{
System.out.println("DanTai");
}
public static DanTai Fanhui()
{
return Dan;
}
}
public class Dantaimoshi{
public static void main(String[] args)
{
System.out.println(DanTai.Fanhui().i);
}
}
我们给静态变量dan赋值的时候应该是只赋值一次,但是我有点不太明白。
当给dan赋值的时候 会产生一个新的DanTai对象,同时又产生一个静态的dan变量,我知道静态变量是共享一块内存的,所以认为每次产生的静态变量都是同一块内存,而dan的值是不断被新的句柄覆盖。我知道这种想法是错的,请各位知情者告知原因,尽量详细点 小弟谢了
由于DanTai被加载一次,而DanTai的构造器为私有的,故能保证DanTai类实例对象只有一个,通过公有接口Fanhui返回.
由于Dan为静态在DanTai类加载后就被初始化了,这先于构造器的初始化,故不会造成递归调用构造器.
dan值在程序整过过程中都不会被改变,始终指向静态初始化时候赋予的实例对象.就这么多,供参考,不知道我说清楚了没有!
这 就使得单例无法被继承,外部函数通过特定的方法获取单力类,是不会产生新得单力实例的
问一下hbyufan() 兄:由于Dan为静态在DanTai类加载后就被初始化了,这先于构造器的初始化,故不会造成递归调用构造器. 可是Dan在类加载的时候初始化 也要调用构造器啊不然怎么初始化? 那么说 如果去掉static Dan是什么时候初始化的那?应该也是在类的加载的时候初始化的把? 然后反复的给新对象的Dan变量初始化。
你的意思 不确定原理对不对?不过还是谢谢你。