static
{
age=3;
System.out.println(age);
}
static int age=1;
为什么一个能过,后面那个不能过?
也就是说静态代码块里的age在类加载的时候如果前面没定义它,它可以自发去后面寻找看有没有定义过,但是这时候只是简单的声明一个值而已,还不能调用它,静态代码块都没加载完,后面的静态变量还在排队呢。
如果把打印语句取消的话,为什么能打印出结果1?因为这时属性都已经初始化完了,也就随便你调用了。加上打印语句的话不就是说我static int age=1;都还没加载到,就像是你知道孕妇肚子里的是一个人,但是你不能叫这个人还没出生就叫他哭几声给你听吧。
作者: 最初的理想 时间: 2012-2-1 16:35
java中普通变量不能先定义后使用吧!
------------------
class Test
{
static
{
age=3;
}
static int age=1;
}
class TestDemo
{
public static void main(String[] args)
{
System.out.println(Test.age);
}
}
------------------------这段代码没问题 证明了静态变量可以先定义再赋值,结果为1
class Test
{
static
{
age=3;
}
static int age;
}
class TestDemo
{
public static void main(String[] args)
{
System.out.println(Test.age);
}
}
---------------------------------------这段代码证明了上面一样的结论。
static
{
age=3;
}
static int age=1;