对象初始化的步骤

2017-07-09  本文已影响21人  缄默的石头

对象new的步骤:

  1. 虚拟机遇到new指令的时候,首先在常量池中定位这个类的符号引用
  2. 如果当前类存在父类,检查父类有没加载,加载父类,执行父类的静态字段,静态代码块
  3. 加载当前类的静态字段,静态代码块
  4. 开始执行new指令,如果存在父类,子类对象要完成初始化,首先要对父类对象进行初始化,所有构造函数第一行隐式执行了super()语句,先对父类对象进行初始化,(默认初始化,构造代码块,显式初始化(也就是构造函数内的初始化)),再对子类对象进行初始化

流程图如下:


注意点:

  1. 在父类构造器中,语法上是允许调用子类重写的方法,但是要禁止这种写法,是因为此时子类还没有完成初始化,执行子类重写的方法可能出现问题。
  2. 在父类构造器中,sout(this),显示的是子类对象的引用,但是this.field执行却是父类的字段
上一篇 下一篇

猜你喜欢

热点阅读