每日一练8:java自定义类初始化顺序详解

类是java中重要的引用数据类型,了解类的初始化顺序对正确设计程序逻辑具有重要的指导作用。本文主要从创建对象角度分析类的初始化顺序,主要包含两个方面内容:一是创建对象时各成员的初始化顺序。二是创建子类对象时各成员的初始化顺序。

一、创建对象时初始化顺序

     类中具有普通成员变量、静态成员变量、普通初始化代码块、静态代码块、构造函数,在一个类中它们的执行初始化顺序是:静态成员、静态代码块、普通成员变量、普通初始化代码块、构造函数。示例如下:

每日一练8:java自定义类初始化顺序详解

图1 Parent类定义

每日一练8:java自定义类初始化顺序详解

图2类初始化顺序

如果同一个类创建多个对象时,普通初始化代码块会执行多次,静态代码块执行一次。如下图3所示:

每日一练8:java自定义类初始化顺序详解

图3创建同一个类多个对象时执行情况

二、父类及子类初始化顺序

 定义一个Parent的子类Child如下图4所示:

每日一练8:java自定义类初始化顺序详解

图4 Child类定义

子类对象创建时,初始化顺序是:父类静态成员、父类静态代码块、子类静态成员、子类静态代码块、父类普通成员变量、父类普通初始化代码块、父类构造函数、子类普通成员变量、子类普通初始化代码块、子类构造函数。创建一个子类对象的初始化顺序如下图5所示:

每日一练8:java自定义类初始化顺序详解

图5创建一个子类对象时初始化顺序

创建多个子类对象时,如图6所示,类的初始化顺序是: 父类普通成员变量、父类普通初始化代码块、父类构造函数、子类普通成员变量、子类普通初始化代码块、子类构造函数,从以上可以看出父类及子类的代码块只执行了一次。

每日一练8:java自定义类初始化顺序详解

图6创建多个子类对象时执行情况

感谢阅读,动一动您的手指,分享给身边的朋友吧!谢谢!

每日一练8:java自定义类初始化顺序详解

长按识别二维码关注本文公众号