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

用方法给成员变量赋值的问题,不懂
public class TestClass{
private int i=giveMeJ();
private int j=10;
private int giveMeJ(){
return j;
}
public static void main(String args[]){
System.out.println((new TestClass()).i);
}
}


为什么输出结果为0?想不明白
------最佳解决方案--------------------
java 的对象初始化顺序决定的.
当执行 new TestClass()时,(实际上是要执行默认的构造方法),先是给成员变量分配空间并赋默认值,i=0,j=0.
之后程序会上溯类的父类初始化,这个类的父类是 Object.
 从 Object里回来后,先给i j显式赋值,这是调用giveMeJ()方法给i赋值,返回j的值0。再给j赋值10。
 之后执行空构造方法,对象产生完。
 所以最后输出 new TestClass().i=0.

楼主参考一下:
http://wenwen.soso.com/z/q191435823.htm
------其他解决方案--------------------
我用调试追踪了一下,在main方法中创建实例的同时申明成员变量,这时i,j的值都是0,然后执行i=giveMeJ()这个方法时i还是0,接着给j赋值成为10,所以出现这样的结果,你调试一下就会看到程序执行过程,应该是这样吧
------其他解决方案--------------------
我也是才学的 不知道我说的对不对 private int i=giveMeJ();这句话 属性 = 方法  不通,方法应该是对象调用 所以 int i = 0  所以结果为0 
------其他解决方案--------------------
这个是顺序初始化的
private int i=giveMeJ();
这个时候 private int j=10;
还没执行,j还是0;

你把顺序调过来,就对了
private int j=10;
private int i=giveMeJ();   
------其他解决方案--------------------
楼上正解。。