抛异常的时候,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 截图:
这里只创建了一个 B 对象、一个 C 对象,然后互相引用了而已(指向对方的地址)。(我指着你,你指着我: B C)
这就解释了,为什么抛异常的时候,Java Debug 时,有些变量能无限展开
原文:http://www.cnblogs.com/liaolongjun/p/6708279.html