本帖最后由 张伟~ 于 2012-2-2 13:27 编辑
class Test
{
static
{
age=3;
}
static int age=1;
}
class TestDemo
{
public static void main(String[] args)
{
System.out.println(Test.age);
}
}
输出结果为1。
age明明定义在后,但是编译运行都OK,
然后在age=3;后加句System.out.println(age);
编译直接不通过。
前后一比较,大概意思是弄出来了,但是用大白话怎么解释这原理呢。
按我的想法就是在类加载的时候静态代码块里的变量可以引用后面的静态变量,但是这时候的age=3还不能被调用,因为要按这里代码的顺序是要先初始静态代码块,在初始化静态变量,
当他们都初始化完后面就可以调用age了。
就像这样的话
class Test
{
static
{
age=3;
}
static int age;
}
class TestDemo
{
public static void main(String[] args)
{
System.out.println(Test.age);
}
}
结果输出为3。
不知道大家怎么看的呢 |