zoukankan      html  css  js  c++  java
  • Java在Debug的时候,有些变量能无限展开(循环了)?

    抛异常的时候,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 时,有些变量能无限展开

  • 相关阅读:
    《设计模式
    JConsole监控远程Tomcat服务器
    Linux下Nginx+tomcat应用系统性能优化
    nginx 解决400 bad request 的方法
    lvs、haproxy、nginx 负载均衡的比较分析
    三种LVS负载均衡技术的优缺点----负载均衡调度算法
    LVS集群的体系结构
    LVS--什么是LVS?
    七、Nginx学习笔记七Nginx的Web缓存服务
    六、Nginx 防盗链
  • 原文地址:https://www.cnblogs.com/liaolongjun/p/6708279.html
Copyright © 2011-2022 走看看