A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何武 中级黑马   /  2013-7-27 18:00  /  1423 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-7-28 09:36 编辑

是不是每一个构造函数的第一行都有this语句,并且为什么this语句一定要在第一行?

评分

参与人数 1黑马币 +5 收起 理由
杜光 + 5 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

6 个回复

倒序浏览
this关键字用来解决局部变量与实例变量同名的问题。当类的构造方法或实例方法中的局部变量和类中定义的实例变量同名时,可用“this.变量名”代表对实例变量的引用。
this必须是第一条。
用来解决一个构造方法调用另外一个构造方法的问题。当一个构造方法需要调用另一个构造方法时,可在此构造方法的第一条语句中使用this来替代被调用的构造方法。
回复 使用道具 举报
this 语句是构造函数属进行初始化,所以要先执行
回复 使用道具 举报
本帖最后由 王丽达 于 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。
回复 使用道具 举报
不是,无参构造方法就没有,而是默认调用父类的无参构造主方法,且此时不能有this.l因为ths代表的是调用本类无参构造方法。如用了this就会造成无限制递归调用。构造方法一定要放在第一行是因为对象初始化工作要首先执行。
回复 使用道具 举报
不是,当本类的构造函数之间进行相互调用时才会用到this()语句。
因为初始化动作要先执行,this语句只能定义在构造函数的第一行。
回复 使用道具 举报
默认构造函数不写也可以,反正默认。至于为什么第一行,因为构造函数有个作用就是初始化,放第一行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马