日期:2014-05-20  浏览次数:20559 次

问一个有关static的问题
public   class   A
{
public   static   void   main(String   args[])
{
B   b   =   new   B();
System.out.println( "OK ");
}
}

class   B
{
static   C   c   =   new   C();
}

class   C
{
static   B   b   =   new   B();
}

static   C   c   =   new   C();和static   B   b   =   new   B();这两句如果不加static很明显调式不能通过.
但是加了static之后,为什么就能调式通过,打印出 "OK "?
这个static到底是干什么用的?
加了static,这个程序运行时内存是怎么分配的?

------解决方案--------------------
或者这样说:

static B b = new B();的语句实际上是在一个静态初始化块里的。
等价于:
static B b;
static{b = new B()} //静态初始化块的语句只会执行一次

而static B b;
C()
{
b = new B();
}
new B()的执行语句是在类的构造函数里的,这样,每次创建C的对象,都会执行一次new B()从而导致死循环