class Z {
    static int peek() { return j; }
    static int i = peek();
    static int j = 1;
}
class Test {
    public static void main(String[] args) {
        System.out.println(Z.i);//输出为0
    }
}
 先问各位大神一个问题:1.一个类(比如:Z)的静态变量什么时候初始化?
 2.上面代码的 peek() 方法 return j; 是哪里的 j ,是不是代码内部有个隐藏的 thisclass ,就像这样 return thisclass.j;
3.上面的代码到底是怎么执行的?为什么 i=0 而不是 1 呢?

解决方案 »

  1.   

    这个问题基本上也是周周有啊。1.一个类(比如:Z)的静态变量什么时候初始化?
    ——在类定义装载时就开始初始化;2.上面代码的 peek() 方法 return j; 是哪里的 j ,是不是代码内部有个隐藏的 thisclass ,就像这样 return thisclass.j;
    ——return j;就是你下面定义的 static int j
    ——准确的说是:return Z.j;3.上面的代码到底是怎么执行的?为什么 i=0 而不是 1 呢?
    ——因为初始化的过程是,先分配存储空间,再顺序执行初始化值的操作;
    ——所以一开始所有静态变量的存储空间都分配好了,然后再开始执行初始化值的操作。
      

  2.   

    i 在调用 peek()方法,因为j没有初始化,会采用默认的初始化值0.
      

  3.   

     static int peek() { return j; }
     static int i = peek();
     static int j = 1;静态是按代码顺序初始化,先初始第一行,二行时,第三行还未被初始化。