这个程序为什么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
------解决方案-------------------- 呵呵 基础真的很深奥啊!为什么我就学不好基础呢?
------解决方案-------------------- 类加载顺序问题