读书人

问一个有关static的有关问题

发布时间: 2012-01-01 23:10:55 作者: rapoo

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

读书人网 >J2SE开发

热点推荐