什么是this
this的概念
this是 JAVA中的一个关键字,它代表当前对象的引用。当我们在类中调用this时指向当前类的实例,它的主要作用包括区分类的成员变量和局部变量,在构造方法中调用其他构造方法,返回当前对象链式调用,作为参数传递。
this的场景化使用案例
区分成员变量和局部变量
在编辑完相关代码以后,可以发现在调用setName & quote、小米"e、getName后返回的还是null name=name,这是由于这行代码中的两个name指的是同一个局部变量,而要赋值给类的成员变量必须用this来指明正确代码。这也就是this的最基础的用法——区分同名变量。
在构造方法中调用其他构造方法(如Person类)
假设要写一个有多个构造方法,可能会面临一个问题:如何避免构造方法中代码重复,this用来调用另一个构造方法就是最佳答案。this name的代码中,零调用了第二个构造方法,既减少了重复代码,又方便统一管理逻辑,注意this构造方法中调用其他构造方法时,this必须是方法的第一行,不允许循环调用构造方法,否则会编译错误。
支持链式调用
在面试中,很多人会提到链式调用。要实现相关代码的运行,就要实现链式调用,其关键在于方法返回this。代码如下。通过返回this,我们可以在一个语句中完成多个调用,大大提升代码的可读性和优雅度。
作为参数传递
当我们要把当前对象传递给另一个方法或对象时,this就派上了用场。如有一个printer类,即负责打印对象的信息,我们可以这样实现。person调用print this时,printer会将当前对象传递给print方法,从而实现打印。
关于this的误区
静态方法中是否可以使用this?
不可以。因为静态方法是属于类的,而this是属于实例的。this不存在在静态方法中。
this可以出现在匿名内部类中吗?
可以,但是要注意this的含义。this指的是匿名类实例,在匿名类内部类中,而不是外部类实例。如果需要引用外部类,可以用外部类名this的方式。
总结与练习
通过本次学习,我们知道了this的四种常见用法,即区分成员变量和局部变量、在构造方法中调用其他构造方法、实现链式调用,以及作为参数传递。同时,也要主要静态方法中不能使用,this要指向匿名内部类中。
在课后也可以进行相关的实践,如student类包含实现name和 score两个属性,支持以下操作:使用构造方法初始化对象name,并通过链式调用设置store打印对象信息。