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;我不知道是为什么,请高手赐教!!谢谢!!

解决方案 »

  1.   

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

  2.   


    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;
    }}
    你改成这样再看看输出是什么??
    static int i=getValue();
    static int j=10;同时静态初始化,  那就就有先后顺序。  初始化i的时候 你的 j并没有定义。
      

  3.   

    嗯 楼上的说对了
    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的值 你就明白了
      

  4.   

    也就是在调用static int i=getValue();返回j的时候,还没有执行到static int j=10;
      

  5.   

    这个就是程序运行先后顺序的问题。
    当运行static int i=getValue();这一句时,j这个变量还只是一个空的内存,没有被赋值了,由于i是int类型的,所以默认是0,
    若果这样写:
    static int j=10;
    static int i=getValue();
    这样就会输出10了。
      

  6.   

    同意楼上的。  应将 static int j 放在 static int i 的前面,因为程序是一部一部执行的。static int i运行的时候 getValue()方法里return 出来的 j = 0;   因为给 static int j赋值的代码在 static int i 的后面.
      

  7.   

    执行main()方法时加载类,加载类的时候遇到static int i=getValue();会调用getValue()方法吗?如果调用,那么在执行getValue()方法过程中它遇到了j,但是此时j并没有定义啊?如果这样不应该报错吗?