java鸡生蛋,蛋生鸡问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 16:19:40
public class EggOrChicken{
public static void main(String[] args){
new Chicken();
}
}

class Egg{
//
static Chicken aChicken=new Chicken();
Egg(){
System.out.println("蛋生鸡");
}
}

class Chicken{
//
static Egg aEgg=new Egg();
Chicken(){
System.out.println("鸡生蛋");
}
}
为什么结果是 鸡生蛋,蛋生鸡,鸡生蛋??
按照我的理解,刚开始加载Chicken类,然后需要创建Egg实例
然后加载Egg类,它创建Chicken类,然因为已经加载过Chicken类了。所以创建Chicken实例,然后进行初始化,输出鸡生蛋,再然后创建Egg实例,输出蛋生鸡
可结果不是这样,求高手解答我理解的问题

main方法中
new Chicken();
首先创建静态类,然后才走构造函数.

所以是先创建Egg类,由于Egg中也有静态类,所以先创建Chicken,而Chicken中的Egg已经创建过.所以执行Chicken中的构造函数,然后是Egg的构造,最后是Chicken的构造.

创建次序为static Chicken,static Egg , nonstatic Chicken.

首先,虚拟机在EggOrChicken里面看到了Chicken,
用ClassLoader加载Chicken类,然后调用Chicken类的static部分,
这个时候看到了Egg,ClassLoader加载Egg,并调用Egg类的static部分,
这个时候Egg new了一个Chicken,因为Chicken已经加载进去了,所以没有ClassLoader加载也没有调用static的过程,
显示出了 鸡生蛋
Egg的static调用返回,继续Chicken的Static调用,初始化一个Egg实例
显示出了 蛋生鸡
所有需要的类加载完成,继续main里面的new Chicken
显示出 鸡生蛋

这应该是白痴问题,类似坚白。
我们从纯自然科学来讲:
鸡、蛋生蛋、鸡,前者鸡蛋与后面的鸡蛋是不一样的事物。
所以如何控制?需要控制器进行。创建鸡蛋实例应该鸡蛋环境的事情。

你想得到什么样的结果??