张孝祥的Java视频-面向对象上-讲static的那部分举了一个chines的例子,以下是其中的一部分:
class Chinese
{
static Chinese objRef=new Chinese();
········
public static Chinese getInstance()
{return objRef;}
private Chinese()
{
``````````````
}
}
他分析的时候说假如在创建objRef的时候没有用关键字static,会引起Chinese的循环调用,我不明白这个怎么理解的,这么说我们在创建其他对象引用的时候也会这样子?但好像没碰到过,想不明白,请各位指点一下 +_+
class Chinese
{
static Chinese objRef=new Chinese();
········
public static Chinese getInstance()
{return objRef;}
private Chinese()
{
``````````````
}
}
他分析的时候说假如在创建objRef的时候没有用关键字static,会引起Chinese的循环调用,我不明白这个怎么理解的,这么说我们在创建其他对象引用的时候也会这样子?但好像没碰到过,想不明白,请各位指点一下 +_+
而如果加static,那么objRef只会在第一次加载这个类时被创建
运行 static Chinese objRef=new Chinese();
这时又要实例化Chinese
看上去循环调用了,
但第二次实例化时不会再运行static初始化语句
所以跳过static Chinese objRef=new Chinese();
直接运行构造函数,所以没有循环
一个类的成员域,如下面的a,b,c,会在创建该类的对象时被创建,如果他们的初始化中又创建了自身的类的对象,那么就会无限重复该过程,直至抛出异常
public class A
{
A a = new A();//死循环
B b = new B();//正常
C c = new C();//死循环
}
class B
{
}
class C
{
A a = new A();
}