内部类不能创建外部类的对象是因为会循环创建导致堆栈溢出?

不許人間見白頭 2017-03-31 11:11:38
内部内创建外部对


public class test001 {

public int tt=10;
private String ss = "sssss";
public void fun() {
System.out.println(super.toString());
}
public inclass inn = new inclass();
class inclass{
test001 t2 = new test001();//创建外部对象
}
public static void main(String[] args) {
test001 t1 = new test001();
t1.fun();

}

}




运行结果:
Exception in thread "main" java.lang.StackOverflowError
at 刘波点2.test001$inclass.<init>(test001.java:12)
at 刘波点2.test001.<init>(test001.java:10)
at 刘波点2.test001$inclass.<init>(test001.java:12)
at 刘波点2.test001.<init>(test001.java:10)
at 刘波点2.test001$inclass.<init>(test001.java:12)
................
无限多个,这就是堆栈溢出

实际上可以参看问题外部类有个内部内对象,内部内又有个外部类对象,这样就形成了循环调用对方导致内存溢出



如果注释掉

public inclass inn = new inclass();

就可以成功运行了,亲
...全文
154 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
as小詹 2017-04-01
  • 打赏
  • 举报
回复

public class Itheima
{

	public int		tt	= 10;
	private String	ss	= "sssss";

	public void fun()
	{
		System.out.println(super.toString());
	}

	public static inclass inn = new inclass();

	static class inclass
	{
		Itheima t2 = new Itheima();// 创建外部对象
	}

	public static void main(String[] args)
	{
		Itheima t1 = new Itheima();
		t1.fun();

	}
}
声明称static的就没错误了

62,614

社区成员

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

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