黑马程序员技术交流社区
标题:
小小的代码为啥栈溢出了?
[打印本页]
作者:
郑世光
时间:
2013-3-12 11:27
标题:
小小的代码为啥栈溢出了?
本帖最后由 郑世光 于 2013-3-12 12:10 编辑
public class Test {
public static void main(String[] args) {
Person p=new Person();
}
}
class Person
{
Person p=new Person();
}
作者:
王亚飞
时间:
2013-3-12 11:40
本帖最后由 王亚飞 于 2013-3-12 11:53 编辑
我知道了,!!!是不是反复执行构造方法,然后造成了溢出?
class Person
{
Person p=new Person();
}
问题出在这里,你person类中写这个Person p = new Person();
这个是 不是行的,在本类中怎么能建立自己的对象呢,没明白你在Person类中写这个有什么目的,建立Person类的对象在main函数中建立就好了,给你个小例子,应该就会明白了
public class Test {
public static void main(String[] args) {
Person p=new Person();
p.setAge(20);
}
}
class Person
{
private int age ;
public void setAge(int a)
{
if(a>=0&&a<=130)
{
age = a;
speak();
}
else
System.out.println("非法年龄");
}
public int getAge()
{
return age;
}
void speak()
{
System.out.println("age = "+age);
}
}
复制代码
作者:
曾钦
时间:
2013-3-12 11:42
你在main方法里面 new 了一个 Person对象,调用的是Person的默认无参构造方法,
然后Person类里面又在new它自己。。
然后就。。。又在new 它自己。。
然后。。。
再然后。。
就一直new 下去了 。。
直到。。栈溢出。。就挂了
Exception in thread "main" java.lang.StackOverflowError
额。算是死循环吧。。{:soso_e113:}
作者:
scott0610
时间:
2013-3-12 11:43
为什么内存溢出,
这是因为你的代码类似于死循环,不断的在创建Person对象。
你在Person类中又在创建自己的对象Person p=new Person();
依次创建下去,就成了死循环,在堆内存中不断的创建对象,
这个肯定就会报内存异常噻!
希望对你有所帮助!
作者:
HM马明宇
时间:
2013-3-12 12:09
死循环创建对象,栈内存消耗完了
就像一个碗,你本来是想倒一点水的,但是你的动作却是一直倒
所以,水就溢出来了嘛
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2