构造函数

构造函数和this关键字 - 图1

  • 构造函数默认就存在,以这种空参形式存在
  • 多个构造器可以同时存在,根据实例生成时的传参的个数确定使用的是哪个构造器

构造函数和this关键字 - 图2


this关键字:

构造函数和this关键字 - 图3

this.name = name 意思就是将形参的值赋给这个对象的name属性

之所以不能写成:name=name
是因为主函数进栈时,形参的name已经存在于栈中
如果这么写,它会优先到栈中去找…
而不是把栈的值赋给堆中的对象的成员属性


当对象调用方法时(构造函数也是方法),默认会有this的引用,这个this,指的就是当前对象

所以当对象会有多个时,应该用this.进行标识,是哪个实例来调用的。


this()

我们可以在构造函数中调用其构造器
但是必须定义在构造函数的第一行,因为初始化动作需要先执行。

构造器调用过程


分步初始化
构造函数和this关键字 - 图4


①当进行首行代码 Person p = new Person(’旺财’,30)时
先找到带有两个参数的构造器,进栈
构造函数和this关键字 - 图5


②接着,遇到this(name)
触发带一个参数的构造函数进栈
执行this.name = name
这时候,对象(0x0067).name就有了值
构造函数和this关键字 - 图6
③然后,第一个构造函数弹栈,执行第二个构造函数的赋值操作
将age赋值给了this(0x0067).age



④最后,初始化完毕,生成p对象:
构造函数和this关键字 - 图7