新建对象new Test()后,对象会对变量进行初始化,你的程序中i的赋值放在第一句,此时程序还没有读到j的值
所以后来返回默认值零。
你要获得J的值应该直接在主函数新建对象,然后调用getValue()获得或者你要把i与j换个位置:
public class NewTest {
private int j = 10;
private int i=getValue();
int getValue(){
return j;
}
public static void main(String[] args) {
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);
}
当我们实例化一个类时,类体中的代码将会被一条一条执行。如:
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) {