日期:2014-05-20  浏览次数:20772 次

这个程序为什么x与y的值不相等?
下面这个程序结果是x=20,y=0.不明白为什么。

public class Test
{
        public static void main(String[] args)
        {
              A a = new A();
              System.out.println(a.x); 
              System.out.println(a.y);                                                
        }
}
 
class A
{      
        public int x ;    

        public A()
        {
         x = 20;
        }         
       public int y = x;
}


我以前也问过,还是没弄明白。明明经过
 
public A()
        {
         x = 20;
        }
     

x的值是20;为什么赋值给y时就变成了0呢?    

------解决方案--------------------
类在加载的时候x被赋了一个默认的初始值,因为是int类型,所有默认初始值为0,在加载y的时候把x的值赋给了y,这时候y的值为0,在main方法中,new一个a的时候对x赋值20。也就是说,在对x赋值20之前,y的值已经为0了。
------解决方案--------------------
1楼说得对的。另外这种问题根本不需要问,直接用debug模式一步一步走,看的清清楚楚
------解决方案--------------------
勘误:不好意思,虽然我说的顺序对了,但是还是有一些不妥的地方,我仔细查了一下资料,我觉得这篇博文写得比较清楚,最先加载的是静态变量和静态方法,之后是成员变量,然后就是构造方法,你仔细看一下这篇文章http://lpqsun-126-com.iteye.com/blog/1166404


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


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


+1
------解决方案--------------------
引用:
Quote: 引用:

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


+1

+2
------解决方案--------------------
LZ看下类的初始化顺序就明白了
------解决方案--------------------
刚开始就当。 x=0 y=0
然后 y=x  再次给y 0
然后 x=20 
所以。。。 最后 x=20 y=0
------解决方案--------------------
呵呵 基础真的很深奥啊!为什么我就学不好基础呢?
------解决方案--------------------
类加载顺序问题