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,这个程序运行时内存是怎么分配的?

解决方案 »

  1.   

    不加static那是个死循环。。加了static以后,就只会被初始化一次,所以可以正常运行。static是静态变量,每一个类在第一次被使用的时候初始化,并且只被初始化一次。
      

  2.   

    那么请问楼上
    public class A
    {
    public static void main(String args[])
    {
    B b = new B();
    System.out.println("OK");
    }
    }class B
    {
    static C c;
    B()
    {
    c = new C();
    }
    }class C
    {
    static B b;
    C()
    {
    b = new B();
    }
    }这样为什么又不能通过了呢
      

  3.   

    static B b = new B();

    static B b;
    b = new B();
    有什么区别
      

  4.   

    区别在于static B b = new B();只会执行一次而static B b;
    C()
    {
    b = new B();
    }
    每次构造C的对象都会执行一次。
      

  5.   

    或者这样说:static B b = new B();的语句实际上是在一个静态初始化块里的。
    等价于:
    static B b;
    static{b = new B()} //静态初始化块的语句只会执行一次而static B b;
    C()
    {
    b = new B();
    }
    new B()的执行语句是在类的构造函数里的,这样,每次创建C的对象,都会执行一次new B()从而导致死循环
      

  6.   

    static B b不是说是静态变量么 只被初始化一次 怎么又每次都会执行呢