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,这个程序运行时内存是怎么分配的?
{
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,这个程序运行时内存是怎么分配的?
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();
}
}这样为什么又不能通过了呢
和
static B b;
b = new B();
有什么区别
C()
{
b = new B();
}
每次构造C的对象都会执行一次。
等价于:
static B b;
static{b = new B()} //静态初始化块的语句只会执行一次而static B b;
C()
{
b = new B();
}
new B()的执行语句是在类的构造函数里的,这样,每次创建C的对象,都会执行一次new B()从而导致死循环