Java中的一个有趣实验

一直很想试验一下对象创建时候两个类循环调用会用什么后果,今天做了一下,果然和想象的一下,下面贴出自己的实验代码:

实验中总共需要三个类:
第一个类:
1 public class Test_A {
2     public Test_A(){
3     Test_B b = new Test_B();
4     System.out.println("A is created!");
5     }
6 }

第二个类:
1 public class Test_B {
2     public Test_B(){
3     Test_A b = new Test_A();
4     System.out.println("B is created!");
5     }
6 }
上面两个类在实例化的时候都需要实例化对方,也就说这里形成了循环调用,下面看看测试类:
1 public class Test {
2     public static void main(String[] args) {
3     // TODO Auto-generated method stub
4     Test_A a = new Test_A();
5     }
6 }
大家现在可以猜一猜实验运行结果(昨天看到一片帖子也是说这个问题的,当时有人说不会出现循环调用)

一下是在Eclipse中的实验结果:
Exception in thread "main" java.lang.StackOverflowError
        at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
    at Test_A.
<init>(Test_A.java:4)
    at Test_B.
<init>(Test_B.java:4)
整个输出窗口全部被占满

和预期的一样,真的产生了循环调用,并且出现了栈溢出异常!!

posted on 2011-10-10 10:45 灰色客栈 阅读(354) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜