写了一个小测试,当new下面的类时就报堆栈益处的误错
class dd{
dd cv = new dd();//如果前面不加static时就会报堆栈益处的错误,加了就没有问题,请问为什么会这样?
dd(){
System.out.println("dfff");
}
}
dd f = new dd();
class dd{
dd cv = new dd();//如果前面不加static时就会报堆栈益处的错误,加了就没有问题,请问为什么会这样?
dd(){
System.out.println("dfff");
}
}
dd f = new dd();
dd cv 是 类的成员变量,在实例化这个类的一个对象的时候,
要先实例化类的成员变量,则执行了dd cv = new dd();,就又去实例化类的对象了,
一直这样下去,无限的实例化这个类的对象,知道内存耗尽。而你加了static的话,
则表明dd cv是属于类的,在类被加载的时候,也就是你第一次new dd()的时候,
static的成员变量dd cv 被加载,执行了dd cv = new dd();,
这个时候的new dd()是不会再去加载 dd cv 的,因为cv是属于类的,是静态成员变量,只在第一次时候加载。
所以就没有问题啦。
java基础很重要。虽然东西不是很多。学习过程中一定要弄明白。