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

有个关于java全局变量的问题
public class Test1 {
static int i=getValue();
static int j=10;
public static void main(String[] args) {
System.out.println(i);
}
private static int getValue() {
return j;
}

}
输出结果为 0;我不知道是为什么,请高手赐教!!谢谢!!

------解决方案--------------------
j运行时会按顺序初始化static,在执行到static int i=getValue();的时候调用了getValue()并return j,但注意这时候的j还没有被初始化,因为整型默认值是0,所以i的值会等于0了。

------解决方案--------------------
Java code

public class Test1 {
static int j=10;
static int i=getValue();

public static void main(String[] args) {
System.out.println(i);
}
private static int getValue() {
return j;
}

}

------解决方案--------------------
嗯 楼上的说对了
public class Tes
{
static int j=10;
static int i=getValue();

public static void main(String[] args) {

System.out.println(i);
}
private static int getValue() {
System.out.println(j);
return j;
}


}

请看上面代码 你可以交换初始化i ,j位置来看打印的j的值 你就明白了
------解决方案--------------------
也就是在调用static int i=getValue();返回j的时候,还没有执行到static int j=10;
------解决方案--------------------
这个就是程序运行先后顺序的问题。
当运行static int i=getValue();这一句时,j这个变量还只是一个空的内存,没有被赋值了,由于i是int类型的,所以默认是0,
若果这样写:
static int j=10;
static int i=getValue();
这样就会输出10了。

------解决方案--------------------
下手慢了。
------解决方案--------------------
同意楼上的。 应将 static int j 放在 static int i 的前面,因为程序是一部一部执行的。static int i运行的时候 getValue()方法里return 出来的 j = 0; 因为给 static int j赋值的代码在 static int i 的后面.
------解决方案--------------------
执行main()方法时加载类,加载类的时候遇到static int i=getValue();会调用getValue()方法吗?如果调用,那么在执行getValue()方法过程中它遇到了j,但是此时j并没有定义啊?如果这样不应该报错吗?
------解决方案--------------------
同意楼上的说法