抛异常的时候,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的时候,有些变量能无限展开(循环了)?的更多相关文章

  1. Java JDK的安装以及环境变量的配置

    安装并配置完Android SDK之后,本想着可以做个简单的APP应用了,只是依然提示我“请确认Java JDK是否安装”类似的报错,于是又进行了Java JDK的安装以及环境变量的配置. 1.下载地 ...

  2. Java学习日记8-包、环境变量和访问控制

    Java中的包.环境变量和访问控制 一.java中的包 Java利用包来组织代码,一来使大型项目的代码结构清晰,二来包是一个命名空间的划分,即不同包中可以有相同名字的类,只需在在类名前加上包名即可区分 ...

  3. (转)Java线程:新特征-条件变量

    Java线程:新特征-条件变量   条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量.但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往 ...

  4. Caused by:java.sql.SQLException:ORA-01008:并非所有变量都已绑定

    1.错误描述 Caused by:java.sql.SQLException:ORA-01008:并非所有变量都已绑定 2.错误原因 3.解决办法

  5. java、maven、tomcat 环境变量配置

    Linux 配置java.maven.tomcat 环境变量 打开 /etc/profile 在下面写上 # java env JAVA_HOME=/usr/local/tools/java   (j ...

  6. java类中根据已有的变量复写类的toString方法

    java类中根据已有的变量复写类的toString方法: 在该类中定义好变量之后,shift+alt+s,从出现的列表中点击gemerate toString,就会自动生成对应的toString方法.

  7. JAVA 基础基本语法---常量与变量

    JAVA 基础基本语法---常量与变量 语法:计算机能够识别的语言的规则: 0. 基本语法 编写Java程序时,应注意以下几点: 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hel ...

  8. “全栈2019”Java第十二章:变量

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. Java线程工作内存与主内存变量交换过程及volatile关键字理解

    Java线程工作内存与主内存变量交换过程及volatile关键字理解 1. Java内存模型规定在多线程情况下,线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行.此处的所谓内存模 ...

随机推荐

  1. 超出区域文字显示为省略号或者剪切效果——CSS的生僻操作

    每门语言总有那么一些不太常用,却又不可或缺的语法操作.下面说一下,在HTML文件中,如何设置用 "省略号" 和 "剪切" 代替大量文字的效果. 以下是HTML的 ...

  2. JavaScript定义函数的三种方式

    直接定义函数 function f1(x,y){ return x+y; } 使用Function构造函数 var f2=new Function("x","y" ...

  3. 安全体系(二)——RSA算法详解

    本文主要讲述RSA算法使用的基本数学知识.秘钥的计算过程以及加密和解密的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 1.概述 ...

  4. 用C#来学习唐诗三百首

    Begin 最近把项目做完了,闲来无事,就想做点好玩的事情,刚好前几天下载了[唐诗三百首]和[全唐诗]这两个txt文件,正好用C#来整理一下. [唐诗三百首]文件格式 [全唐诗]文件格式 目标 将每一 ...

  5. 我的第一个webapiDemo

    最近在面试,总是被问到有没有接触过webapi 或者问webapi和MVC 的区别,今天看了看,原来如此,自己理解感觉webapi和webservice一样像是实现soa 的一种形式,也可以理解为服务 ...

  6. selenium+python 自动化中界面滚动条操作方法

    虽然webdriver提供了操作浏览器的前进和后退的方法,但对于浏览器滚动条并没有提供相应的操作方法,以下使用的方法: 借助JavaScript来控制浏览器的滚动条,webdriver提供了execu ...

  7. git中常见的几个命令

    git中常见的几个命令 本地仓库 三个区域 工作目录 暂存区 本地仓库 文件的四个状态 未跟踪 untracked 已暂存 staged 已提交commited 已修改 modified 基本命令 g ...

  8. Asp.net web api 知多少

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  9. linux yum下载文件的存放位置

    默认是: /var/cache/yum也可以在 /etc/yum.conf 指定cachedir=/var/cache/yum #存放目录keepcache=1 #1为保存 0为不保存metadata ...

  10. python常见的特异点

    编码问题 Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错.解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或 ...