码迷,mamicode.com
首页 > 编程语言 > 详细

Java在Debug的时候,有些变量能无限展开(循环了)?

时间:2017-04-14 13:33:44      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:lang   int   als   erro   img   异常   技术分享   blog   tac   

抛异常的时候,Java Debug 时,有些变量能无限展开,怎么做到的?

 

先来一个报错的例子:

Exception in thread "main" java.lang.StackOverflowError
 at llj.mf.ace.C.<init>(C.java:3)
 at llj.mf.ace.B.<init>(B.java:5)
 at llj.mf.ace.C.<init>(C.java:5)
 at llj.mf.ace.B.<init>(B.java:5)
 at llj.mf.ace.C.<init>(C.java:5)
 at llj.mf.ace.B.<init>(B.java:5)
 at llj.mf.ace.C.<init>(C.java:5)
 at llj.mf.ace.B.<init>(B.java:5)
 ....
 ....

报错的代码:

public class Ace {

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

}

public class B {

	C c = new C();

}

public class C {

	B b = new B();

}

报错的原因:创建 B 对象的时候,B 对象会创建一个 C 对象,C 对象又会创建一个 B 对象,。。。这个会创建无数个 B 对象、C 对象,所以就 StackOverflowError

 

能无限展开的例子:

/**
 * 这个debug的时候,有无限个下级(循环了)(你中有我,我中有你)
 */
public class BCBC {

	public static void main(String[] args) {
		B b = new B();
		C c = new C();
		b.c = c;
		c.b = b;
		System.out.println(b.equals(c)); // 断点处
	}

	static class B {
		C c;
	}

	static class C {
		B b;
	}

}

上面示例 Debug 截图:

技术分享

这里只创建了一个 B 对象、一个 C 对象,然后互相引用了而已(指向对方的地址)。(我指着你,你指着我: B <------> C)

 

这就解释了,为什么抛异常的时候,Java Debug 时,有些变量能无限展开

 

Java在Debug的时候,有些变量能无限展开(循环了)?

标签:lang   int   als   erro   img   异常   技术分享   blog   tac   

原文地址:http://www.cnblogs.com/liaolongjun/p/6708279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!