问答详情
源自:9-5 Java 中的 final 的使用

关于继承的一个问题

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么?

提问者:榎目贵音 2016-05-05 18:16

个回答

  • 命里有玄机
    2016-05-05 18:37:12
    已采纳

    static 初始化快在构造器前先执行,不会覆盖..

  • qq_雾里看花_12
    2017-07-13 19:00:25

    执行顺序,普通初始化>static初始化>构造函数初始化。构造这个最后执行。

  • BlueBlueSkyZ
    2016-07-09 20:38:33

    注意顺序

  • 雪中_悍刀行
    2016-07-09 18:15:37

    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);

    }

    }

  • 书书呆呆子子
    2016-05-10 13:05:25

    执行顺序是static代码块,然后是构造方法,然后是普通方法。