首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

问一个有关static的有关问题

2012-01-01 
问一个有关static的问题publicclassA{publicstaticvoidmain(Stringargs[]){BbnewB()System.out.println(

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

热点排行