class test
{
public int i=getValue(); public int j = 10; 注意这一句
public int getValue()
{
return j;
}
}
public class P
{
public static void main(String[] args)
{
System.out.println(new test().i);
}
}
我改过的:
package com.itcast.test;
class test
{
public int j = 10;
public int getValue()
{
return j;
}
public int i=getValue();} 注意这一句
public class P
{
public static void main(String[] args)
{
System.out.println(new test().i);
}
}
初始值为0,在对 j 进行赋值之前你就将默认的初始化0给了i,所以 i 就是0.
作者: 常佳杰 时间: 2012-6-24 17:53
当你 new Test()的时候,先初始化 i 和j ;而它们的初始化又是先建立一个int的对象,int的默认初始化为0,i和j就都是0了...
接下来才按顺序再次进行赋值;i=getValue();而getValue()返回的j的值;因为是按顺序执行的所以执行完getValue()后才执行 j=10;
当你执行getValue()时j还是默认的初始化值0,所以打印出来的结果就是0了...
总结: java虚拟机是按照顺序来进行初始化的作者: 谭立文 时间: 2012-6-24 18:30
当我们实例化一个类时,类体中的代码将会被一条一条执行。如:
public class Test
{
private int i = getI();
private int j = getJ();
private int k = getK();
int getI()
{
System.out.println("得到i的值");
return 1;
}
int getJ()
{
System.out.println("得到j的值");
return 2;
}
int getK()
{
System.out.println("得到k的值");
return 3;
}
public static void main(String[] args) {
Test test = new Test();
}
}
你会发现输出的分别是:
得到i的值
得到j的值
得到k的值
在你的程序中你先定义了 private int i=getValue(); 同时调用方法getValue();将j的值返回并赋值给i,此时j的定义在i之后程序根本还没有对j进行初始化处理,所以返回给i的值为0。
若改为:
public class test {
private int j = 10;
private int i=getValue();
int getValue(){
return j;
}
public static void main(String[] args) {