日期:2014-05-18  浏览次数:20662 次

小白求助,JAVA类里面实例化自己
public class Test01 {

public String var;

public Test01(){var="a";}
Test01 t1=new Test01();
void p (){System.out.println(var);}
public static void main(String[] args) {
Test01 pp=new Test01();
pp.p();
}

}

一运行就出错

------解决方案--------------------
public class Test01 {

public String var;

public Test01() {
var = "a";
}

//Test01 t1 = new Test01();

void p() {
System.out.println(var);
}

public static void main(String[] args) {
Test01 pp = new Test01();
pp.p();
}
}

注释的这行代码没意义啊
------解决方案--------------------
而且你这样写好像是个死循环
------解决方案--------------------
Test01 t1 = new Test01(); 


靠, 楼主这样的写法是要闹哪样?
------解决方案--------------------
Test01 t1=new Test01();

这表示要声明一个成员属性t1,这个t1又实例化为自身类型,于是,无限循环下去了,形成一个无底洞,最终栈溢出了。
------解决方案--------------------
静态变量在你创造这个类时直接在内存中创建了这个变量.
在需要时直接根据变量名称去内存中查找该变量.
------解决方案--------------------
静态变量只会实例化一次
------解决方案--------------------
jvm 中是由一块静态变量内存啊,
给个传送门,去看看jvm 怎么定义的http://bbs.csdn.net/topics/390251794
感谢java2000_wl
------解决方案--------------------
上面那位用static的方法是因为static在内存中只会生成一次。你原始代码是死循环。但有static只new一次。所以运行正确。。。。