java:类的初始化顺序

最近对自己的一些小毛病越来越不能容忍了,喝喝~与其说是不能容忍,倒不如说那些毛病已经开始阻碍到自己正常的工作与学习。除了熬夜、工作有点拖沓外,还有个就是学习不做记录,当脑海中暂时理顺了思路,觉得自己理解了,就以为自己掌握了。一觉醒来忘得七七八八,过几天再遇到又是从头学起,想想的确挺恶心的。

在骑着蜗牛向前跑的路上,一点点记录,积累,不断迭代..........

这是第一次在简书上写文章,选择简书只是因为它的简约,我一贯比较喜欢的风格。貌似有点跑偏了,哈哈,切入正题。

java的类在使用前都必须初始化,这点程序员都知道,但具体的初始化顺序我是今天才搞明白,记住三条规则就行了:

1. java的子类在执行任何操作之前,它的父类必须先被初始化。

2. 在执行子类的构造函数时,会先执行父类的构造函数。

3. 在类初始化时,先初始化成员变量,再调用构造函数。

代码说明

上面的代码很简单,Son继承了Father,在main中执行print方法。整个代码执行的流程如下:

1.先运行到第4行,new一个Son对象。

2.然后运行到22行,执行Son的构造函数。(此时Son的构造函数还未执行)

3.立刻又运行到14行,准备执行Father的构造函数。(因为初始化子类前必须先初始化父类,此时Father的构造函数也没执行)

4.然后运行到11行,执行11、12行两个成员变量初始化。(一个类先初始化成员变量,再执行构造函数。再这里系统给Father中的name和age两个变量分配了存储空间,并赋值)

5.紧接着运行到14行,执行Father的构造函数,这里是无参构造函数。(至此,父类初始化完成)

6.然后运行到19行,先初始化Son的成员变量。(这里系统仅仅为Son的成员变量分配存储空间,里面的值是默认的,没什么意义)

7.之后运行22行Son的构造函数,给Son的两个变量赋值。(至此,Son的初始化完成)

8.接下来运行第5行,执行son的print方法,一直往下执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   最近在看回顾Java基础的时候,发现看似很简单的类初始化的顺序却并不是那么简单(往往越是简单的东西反而越容易出...
    BrightLoong阅读 1,502评论 0 2
  • 先说结论: 第一等级:父类静态方法、父类静态变量 第二等级:子类静态方法、子类静态变量 第三等级:父类普通代码块、...
    薛定谔_810a阅读 656评论 0 3
  • 做Java开发的,起码要知道类的初始化顺序,因为这样你才知道编写的代码运行到了那里。 一段代码 以上代码运行的结果...
    AI贺贺阅读 106评论 0 0
  • 非继承:1.static静态代码块和静态成员2.普通成员3.构造函数执行 继承:1.父类静态代码区和父类静态成员2...
    寻亦追忆阅读 102评论 1 0
  • Java类的初始化顺序 (静态变量、静态代码块)> 类里的 main()(如果有的话) > (变量、初始化块) >...
    PaulLuv阅读 201评论 1 0