目录
- 问题
- 问题一:什么是this关键字?
- 问题二:什么是this()?
问题
问题一:什么是this关键字?
定义:this 代表当前对象。这个定义比较抽象,举例来回答。
思考一个问题:如果没有 this 会怎样? 如图:如果没有 this,那么在通过方法对类成员变量赋值时,左边的变量我们以为是成员变量,但实际上却是局部变量,成员变量并没有发生改变,编译器会根据就近原则,把左边的 year
当成传递进来的参数,“我给我自己赋值”,相当于我给我自己发工资,显然不太合理。
而 this 关键字就表明,你传递进来的参数是给哪个对象里面的成员变量进行赋值的,如图:this 引用其实被编译器隐藏起来了,对象 d1
调用了这个方法,这个this就代表了d1
这个对象,指名道姓地给这个 d1
里面的变量赋值,这样编译器就知道你传入的参数是给 d1
的了。
注:this 只能在成员方法中使用(在其他地方也使用不了)
问题二:什么是this()?
this() 可以在类的构造方法中调用该类的其他的构造方法。
为什么要有 this() ?它有啥用?
打个比方,比如说顺序表这个数据结构,当我们 new ArrayList
的时候,并没有传参,但仔细想一想,我们都没给他顺序表的长度,它怎么能构造出顺序表的呢?
用 this()
就可以搞定,ArrayList
完全可以在无参构造方法中调用 this()
,让它去调用其他有参构造方法,简单来说就是创造者为了让我们傻瓜式使用这些类,他在内部中帮我们自动初始化顺序表大小、自动扩容等等操作,而我们不必费心去了解其内部结构,只需要简单的一步就能够使用顺序表这一数据结构。(虽然实际上 ArrayList
并不是这么实现的,这里只是用最熟悉的数据结构来打个比方,用 this()
也是可以完成的)
注:this()
的优先级是最高的,需要在构造方法中放在第一执行位上。