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

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

先来一个报错的例子:

Exception in thread "main" java.lang.StackOverflowError

at llj.mf.ace.C.(C.java:3)

at llj.mf.ace.B.(B.java:5)

at llj.mf.ace.C.(C.java:5)

at llj.mf.ace.B.(B.java:5)

at llj.mf.ace.C.(C.java:5)

at llj.mf.ace.B.(B.java:5)

at llj.mf.ace.C.(C.java:5)

at llj.mf.ace.B.(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 截图:

8b7c439d562f68ffbbb3156d18345ada.png

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值