运行结果为什么是这样

jingulang 2008-06-05 03:11:15

class Test
{
public static void main(String[] args) {
new B();
}

}

class A
{
//A a = new A(); 执行这行的话就报错java.lang.StackOverflowError

A()
{
System.out.println("aaa");
}
}
class B extends A
{
B b = new B();
B()
{
System.out.println("bbb");
}
}


运行结果是无数个aaaaaaaaaaaaaaaaaaaaaaaa.................死循环了

这是为什么

如运行//A a = new A();的话就报错java.lang.StackOverflowError
...全文
139 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2008-06-05
  • 打赏
  • 举报
回复
因为你在类B中又包含一个b的成员,这样导致JVM又开始创建一个新的B对象了,这样又因为包含成员b,又开始创建B对象了

一直重复直到溢出
psyl 2008-06-05
  • 打赏
  • 举报
回复
dui 对,不过我对米的话有点不懂。 为什么注释掉这句还是堆栈溢出。。

不是只打印2次么??
da11393 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 radeonxhl 的回复:]
当然会死循环了

A类有一个类型也是A的成员变量a,new A()的时候,就要去实例化它的成员变量a,a = new A(),然后a也有自己的成员变量也要实例化,然后又调用new A()
如此一直循环到死
[/Quote]

就是这样的,new B()的时候先返上去调B的父类A,A有个构造函数A(),故执行 System.out.println("aaa");
然后b实例化,引起无限循环
michelecindy 2008-06-05
  • 打赏
  • 举报
回复
A a = new A(); 这句你可以房在 class B 中 ,也可以放在
class Test中 当时不能在 class A中使用...
另外打印 无数个 aa的话
就是因为
当你new B();
会 执行到B() 这一句
然后 B 是 继承 A 的 所以 跑上次打印了个a
又跑回B 类里
执行完
B b = new B();
后 又一次 执行到 B()
然后又一次 跑 上次打印 a
所以就会又无数个了
lwlivy 2008-06-05
  • 打赏
  • 举报
回复
class A
{
//A a = new A(); 执行这行的话就报错java.lang.StackOverflowError

A()
{
System.out.println("aaa");
}
}
class B extends A
{
B b = new B();
B()
{
System.out.println("bbb");
}
}


你为什么在A和B类里面还 new 他们阿
ChDw 2008-06-05
  • 打赏
  • 举报
回复
无论你加不加//A a = new A(),都会出现StackOverflow的


因为当你new B()时,JVM会按首先初始化父类A中成员变量,并执行它的构造函数,然后初始化B中的成员变量,当初始化类B中的成员b时,它要求创建一个新的B对象,JVM又重新开始创建对象了,结果就是死循环,
最后堆栈溢出了



至于出现aaaaaaaaaaaaaaaaaaaa是因为在new B()时,初始化父类A的构造函数时,打印出aaa了
finalzhzhk 2008-06-05
  • 打赏
  • 举报
回复
B继承A,所以new B()分配内存时;会先new A();
而new B()又会导致b = new B()----->再导致new A();
这样就死循环了。
所以StackOverflowError
(执行不执行A a = new A();)都会导致StackOverflowError,只是时间问题。
radeonxhl 2008-06-05
  • 打赏
  • 举报
回复
当然会死循环了

A类有一个类型也是A的成员变量a,new A()的时候,就要去实例化它的成员变量a,a = new A(),然后a也有自己的成员变量也要实例化,然后又调用new A()
如此一直循环到死

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧