黑马程序员技术交流社区
标题:
this
[打印本页]
作者:
何武
时间:
2013-7-27 18:00
标题:
this
本帖最后由 杜光 于 2013-7-28 09:36 编辑
是不是每一个构造函数的第一行都有this语句,并且为什么this语句一定要在第一行?
作者:
jialihong
时间:
2013-7-27 18:09
this关键字用来解决局部变量与实例变量同名的问题。当类的构造方法或实例方法中的局部变量和类中定义的实例变量同名时,可用“this.变量名”代表对实例变量的引用。
this必须是第一条。
用来解决一个构造方法调用另外一个构造方法的问题。当一个构造方法需要调用另一个构造方法时,可在此构造方法的第一条语句中使用this来替代被调用的构造方法。
作者:
Joesph
时间:
2013-7-27 18:45
this 语句是构造函数属进行初始化,所以要先执行
作者:
王丽达
时间:
2013-7-27 19:54
本帖最后由 王丽达 于 2013-7-27 19:56 编辑
子类构造器是用super隐式或显式来调用父类构造器的。
隐式是指在子类构造器中没有使用super和this时,系统自动在子类构造器中第一行隐式默认加上super()来调用父类无参构造器,此时如果父类没有super()所对应无参构造器,则会出错。反之显式是使用super或this时,系统不会在此子类构造器中再提供隐式的super(),即会用显示使用的super或this来代替隐式的super()。显式的super要放在第一行覆盖系统提供的隐式的super。
this也必须放在第一行,是因为有this的构造器不会再有任何的super,表面是不能直接调用父类构造器,但是this调用了子类中的其他构造器,这个被调用的子类构造器里有super来调用父类构造器,所以有this的构造器只是间接通过子类中的其他构造器来调用父类构造器,所以this放在第一行。
所以,第一行也可能是super。
作者:
影响力147753321
时间:
2013-7-27 20:43
不是,无参构造方法就没有,而是默认调用父类的无参构造主方法,且此时不能有this.l因为ths代表的是调用本类无参构造方法。如用了this就会造成无限制递归调用。构造方法一定要放在第一行是因为对象初始化工作要首先执行。
作者:
yangchao8907
时间:
2013-7-27 22:42
不是,当本类的构造函数之间进行相互调用时才会用到this()语句。
因为初始化动作要先执行,this语句只能定义在构造函数的第一行。
作者:
诸隆隆
时间:
2013-7-27 22:46
默认构造函数不写也可以,反正默认。至于为什么第一行,因为构造函数有个作用就是初始化,放第一行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2