class Single
{ private int num;
public void setNum(int num)
{ this.num=num;
}
public int getNum()
{
return num;
}
Single(){}
private Single s =new Single(); //把static取掉
}
class SingleDemo
{
public static void main (String[]args)
{
Single s1=new Single();
Single s2=new Single();
s1.setNum(30);
System.out.println(s2.getNum());
}
}
//这个问题是内存的溢出
//解释原因
//你在主函数中创建对象,那么S1会调用自己的类中的构造函数初始化此对象,初始化S1自己的成员属性
//而 private Single s =new Single(); 属性成员对象,那么他也要初始化,所以会在内存的堆中开辟空间
//因为此时的成员属性也是在初始化对象,那么他会继续调用Singel并初始化它,有在内存中开辟空间
//此时类推,一直在创建对象,但是一直没有完成这个初始化动作,他会一直在堆内存中创建,直到系统给JVM
//分配的空间用完,所以会有以上的错误。
//但是你把那个成员属性加了静态,那么它会在内存的方法去,而不是内存的堆中,他是一个共享的数据,只会有一个对象
//类加载时,他已经完成了初始化的动作了. |