Java语言中类的完整构造执行顺序

转帖|其它|编辑:郝浩|2008-11-19 09:33:58.000|阅读 746 次

概述:Java语言中类的完整构造执行顺序

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  这里只说一个完整的结果。

  如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块。

  如果类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块。

  将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false;对象类型的初始值为null)。

  如果构造方法中存在this()调用(可以是其它带参数的this()调用)则执行之,执行完毕后进入第7步继续执行,如果没有this调用则进行下一步。(这个有可能存在递归调用其它的构造方法)

  执行显式的super()调用(可以是其它带参数的super()调用)或者隐式的super()调用(缺省构造方法),此步骤又进入一个父类的构造过程并一直上推至Object对象的构造。

  执行类申明中的成员赋值和初始化块。

  执行构造方法中的其它语句。

  其中第4步是比较麻烦的,因为this调用实际上会调用类的另外一个构造方法,最终应该是执行类的某个构造方法,它可能会显示的调用super,但是无论是否调用super,最终都是执行super的,也就是父类的构造方法并一直这样递归到Object,所以在子类和父类的构造中,首先构造或者说执行的是父类的构造,但是它是由子类的构造方法调用的,先于构造方法的方法体里面的内容,这个是由编译器决定的。所以我感觉简单直观一些的顺序表述应该是:

  • 如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块
  • 如果类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块
  • 将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false;对象类型的初始值为null)
  • 执行构造方法,并可能递归调用this(),最终先执行父类的构造方法并一直递归到Object的构造方法的执行
  • 父类的构造方法执行完成后,执行类申明中的成员赋值和初始化块。
  • 执行构造方法中的其它语句。

  最终的简化顺序版本是:

  • 父类的静态成员赋值和静态块
  • 子类的静态成员和静态块
  • 父类的构造方法
  • 父类的成员赋值和初始化块
  • 父类的构造方法中的其它语句
  • 子类的成员赋值和初始化块
  • 子类的构造方法中的其它语句

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:IT专家网论坛

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP