各位高手,初学者求教。结合以下实例说下静态的用法。一直搞不懂为什么不是
a=10
b=10public class TestClassLoader{
static int a = get();
static int b = 10;
static int get(){
return b;
}
public static void main(String[] args){
TestClassLoader t= new TestClassLoader();
System.out.println("a:"+a);
System.out.println("b:"+b);
}
}
a=10
b=10public class TestClassLoader{
static int a = get();
static int b = 10;
static int get(){
return b;
}
public static void main(String[] args){
TestClassLoader t= new TestClassLoader();
System.out.println("a:"+a);
System.out.println("b:"+b);
}
}
另外在类第一次被使用时,静态变量就初始化了
初始化时,是按变量的顺序初始化的.
所以先初始化a,调用get()方法,把b的值0赋给了a.
再初始化b,赋一个10给b.
也就是
在TestClassLoader t= new TestClassLoader();
中就顺序地先对a进行初始化,由于此时b尚为0,a调用get()也是0
之后b才初始化为10
要让a和b都为10,就把a和b的初始化语句对调一下即可
子类的静态变量和静态初始化块是在父类的变量,初始化块和构造器初始化之前完成
父类的变量初始化块构造器是在子类的变量初始化构造器之前完成
静态变量和静态初始化块的初始化顺序取决于在类中顺序,同变量和初始化块