黑马程序员技术交流社区

标题: 小小的代码为啥栈溢出了? [打印本页]

作者: 郑世光    时间: 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 编辑
  1. 我知道了,!!!是不是反复执行构造方法,然后造成了溢出?



  2. class Person
  3. {
  4.         Person p=new Person();
  5. }
  6. 问题出在这里,你person类中写这个Person p = new Person();
  7. 这个是 不是行的,在本类中怎么能建立自己的对象呢,没明白你在Person类中写这个有什么目的,建立Person类的对象在main函数中建立就好了,给你个小例子,应该就会明白了
  8. public class Test {

  9.         public static void main(String[] args) {
  10.                 Person p=new Person();
  11.                 p.setAge(20);
  12.         }

  13. }
  14. class Person
  15. {
  16.         private int age ;
  17.         public void setAge(int a)
  18.         {
  19.                 if(a>=0&&a<=130)
  20.                 {
  21.                         age = a;
  22.                         speak();
  23.                 }
  24.                 else
  25.                         System.out.println("非法年龄");
  26.                
  27.         }
  28.         public int getAge()
  29.         {
  30.                 return age;
  31.         }
  32.         void speak()
  33.         {
  34.                 System.out.println("age = "+age);
  35. }
  36. }
复制代码

作者: 曾钦    时间: 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