Java在Debug的时候,有些变量能无限展开(循环了)?
2017-04-14 12:47
288 查看
抛异常的时候,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)
....
....
报错的代码:
报错的原因:创建 B 对象的时候,B 对象会创建一个 C 对象,C 对象又会创建一个 B 对象,。。。这个会创建无数个 B 对象、C 对象,所以就 StackOverflowError 了
能无限展开的例子:
上面示例 Debug 截图:
这里只创建了一个 B 对象、一个 C 对象,然后互相引用了而已(指向对方的地址)。(我指着你,你指着我: B <------> C)
这就解释了,为什么抛异常的时候,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 时,有些变量能无限展开
相关文章推荐
- eclipse在debug时候,可能鼠标放上去,有些变量不直接显示咋办?
- 循环的时候如何安全地删除java集合的元素
- Java基础学习笔记(一)环境变量配置,数据类型,运算符,控制语句,循环语句
- 数据库技术_Orcale技术(0002)_5分钟会用存储过程_存储过程简单实例(包含循环、条件、增改查、参数传入、变量赋值、java调用等)
- 【java解惑】整型溢出的循环控制变量
- eclipse进行Debug的时候,发出“java breakpoint unable to install breakpoint”错误
- CallBack异步回调的时候嵌套当前回调造成无限循环
- java项目debug 的时候总是跳转threadpoolexecutor
- java 求无限循环小数的循环体/循环部分 project euler problem26
- 循环的时候坚持使用(signed) 的数据类型的变量作为循环变量
- eclipse进行Debug的时候,发出“java breakpoint unable to install breakpoint”错误
- java for循环多变量和for:
- JAVA基础_无限循环
- Java debug jdk 插件源代码变量
- java中的JSTL的forEach得到循环变量
- 关于Java for循环括号中的变量的Java测试
- java代码-----循环变量的
- 【Java】内部类访问的外部变量定义成final (数据保持一致,外部修改后无法通知内部,编译的时候会通过构造方法传进来) Java内部类一般访问不了外部变量
- Java初学--无限循环
- java循环练习:由输入的值决定循环的执行次数,循环变量默认从1开始