静态块 和构造器在继承情况下执行顺序

来源:互联网 发布:minitab比较多组数据 编辑:程序博客网 时间:2024/06/05 12:00

父类静态块初始化---->子类静态块初始化---->父类非静态块初始化---->父类构造方法---->子类非静态块初始化---->子类构造方法。(先静后动,先父后子) 


下面程序的运行结果是什么()

复制代码
class HelloA {    public HelloA() {        System.out.println("HelloA");    }        { System.out.println("I'm A class"); }        static { System.out.println("static A"); }}public class HelloB extends HelloA {    public HelloB() {        System.out.println("HelloB");    }        { System.out.println("I'm B class"); }        static { System.out.println("static B"); }        public static void main(String[] args) {      new HelloB();    }}

答案:

static Astatic BI'm A classHelloAI'm B classHelloB

解析:说实话我觉得这题很好,考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。

对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。



0 0
原创粉丝点击