问一个有关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()从而导致死循环