用方法给成员变量赋值的问题,不懂
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();
------其他解决方案--------------------楼上正解。。