张孝祥的Java视频-面向对象上-讲static的那部分举了一个chines的例子,以下是其中的一部分:
class Chinese
{
    static Chinese objRef=new Chinese();
    ········
    public static Chinese getInstance()
     {return objRef;}
    private Chinese()
     {
      ``````````````
      } 
}
    他分析的时候说假如在创建objRef的时候没有用关键字static,会引起Chinese的循环调用,我不明白这个怎么理解的,这么说我们在创建其他对象引用的时候也会这样子?但好像没碰到过,想不明白,请各位指点一下    +_+

解决方案 »

  1.   

    如果没加static,那么创建一个Chinese对象时,该对象内部含有一个objRef。而objRef又是一个Chinese对象,所以内部还会创建一个objRef。
    而如果加static,那么objRef只会在第一次加载这个类时被创建
      

  2.   

    这是单例的实现方法,static在这里的表示一个类只能创建一个对象。
      

  3.   

    第一次实例化Chinese时
    运行 static Chinese objRef=new Chinese();
    这时又要实例化Chinese
    看上去循环调用了,
    但第二次实例化时不会再运行static初始化语句
    所以跳过static Chinese objRef=new Chinese();
    直接运行构造函数,所以没有循环
      

  4.   

    那么我么平时创建一个对象引用时,怎么不会出现这样的情况呢?是不是和构造方法的private有关?
      

  5.   

    你平时写的类A,里面应该没有A的成员对象吧?
    一个类的成员域,如下面的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();
    }