类在加载的时候x被赋了一个默认的初始值,因为是int类型,所有默认初始值为0,在加载y的时候把x的值赋给了y,这时候y的值为0,在main方法中,new一个a的时候对x赋值20。也就是说,在对x赋值20之前,y的值已经为0了。

解决方案 »

  1.   

    1楼说得对的。另外这种问题根本不需要问,直接用debug模式一步一步走,看的清清楚楚
      

  2.   

    勘误:不好意思,虽然我说的顺序对了,但是还是有一些不妥的地方,我仔细查了一下资料,我觉得这篇博文写得比较清楚,最先加载的是静态变量和静态方法,之后是成员变量,然后就是构造方法,你仔细看一下这篇文章http://lpqsun-126-com.iteye.com/blog/1166404
      

  3.   

    试着这样理解一下
    class A
    {      
            public int x ;    //1.int静态变量初始化为0
            public int y = x; //2.声明变量y,并将x赋给y
            public A()        //3.初始化构造方法
            {
                    x = 20;    
            }         
          
    }
      

  4.   

    我总是以C语言的顺序来理解这个问题,因为我觉得是先赋值给x,然后变x值为20,然后再值为20的x赋值为y.所以总会理解错。
      

  5.   

    刚开始就当。 x=0 y=0
    然后 y=x  再次给y 0
    然后 x=20 
    所以 最后 x=20 y=0