public class demo1 { public static int b=10; public demo1(){ b=1; } static{ b=2; } }
这是第二个
public class Demo2 extends demo1{ public static void main(String[] args) { demo1 d=new demo1(); System.out.println(d.b); } }
为什么结果是1不是2,不是说static的初始化块里面的b会覆盖构造器的b么?
static 初始化快在构造器前先执行,不会覆盖..
执行顺序,普通初始化>static初始化>构造函数初始化。构造这个最后执行。
注意顺序
public class Demo2 extends demo1{
public static void main(String[] args) {
demo1 d=new demo1();
System.out.println(d.b);
}
}
在调用静态变量时,无需创建对象进行调用,
public class Demo2 extends Demon1{
public static void main(String[]args){
System.out.println("静态初始化块中变量"+d);
}
}
执行顺序是static代码块,然后是构造方法,然后是普通方法。