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