this关键字的使用
1. 目前可能出现的问题? 解决问题?
当我们在使用封装时会使用getXxx()方法时,会通过形参给对应的属性赋值。如果形参的名称和属性名称相同时,系统会如何区分两个变量呢?
String name; public viod setName(String name){ name = name; }
此时方法里形参的方法是无法给属性赋值的,方法体里的两个name 都是指像形参。
这种请款就需要this。具体来讲,使用this修饰的变量就是属性,没有this修饰的变量是形参
2. this可以调用的结构有哪些呢?
(1)属性(成员变量):已经在1中讲解this调用属性。不能调用局部变量
(2)方法(函数): 通过this.方法 这样调用的方法
public void eat(){ System.out.println("人吃饭”); sleep();//此时的this. 可以省略 this.sleep(); } public void sleep(){ System.out.println("人睡觉”); }
此时的this.sleep指的是谁调用的eat()方法,谁在调用sleep() 方法。
(3) 构造器
class Construct{ int num; String str; public Construct(){ } public Construct(int num){ this.num = num;//此时this.调用的就是成员变量 } public Construct(int num, String str){ this(num);//此时就是this调用构造器 this.str = str; } }
此时的this(num)调用的就是参数只有一个num的构造器。在后期开发中会遇到很多的成员变量,此时造多个构造器都使用this.变量的方法,代码会非常的多,这种就可以有效减少代码量。
可以理解为: 当前对象(在方法调用时) 或 当前正在创建的对象(在构造器调用时)。
针对于方法内的使用情况:准确说时非static静态变量
一般情况: 我们对过对象a调用方法可以在方法内调用当前对象a的属性或其他方法。此时我们可以在属性和其他方法前使用“this." 。表示当前属性或方法所属的对象啊。但是,一般情况下,我i们都是选择省略次this结构。
特殊情况: 如果方法的形参与对象的属性重名了,我们必须使用this.进行区分,使用this,修饰的变量为属性(或成员变量),没有this,修饰的变量,即为局部变量。
针对于构造器内使用情况:
一般情况: 我们通过构造器创建对象时,可以在构造器内调用当前正在创建的对象的属性或方法。此时,我们可以在属性和方法前使用"this."表示当前属性或方法所属的对象。但是在一般情况下,我们会选择省略”this.“结构。
特殊情况: 如果构造器的形参与正在创建的对象的属性同名了,我们必须使用”this."进行区分,使用this.修饰的变量为属性,没有this.修饰的变量为局部变量。
3、this调用构造器
格式: ” this.(形参列表)"
我们可以类的构造器中,调用当前类指定的的其他构造器
要求:"this.(形参刘表)”必须声明在当前构造器的首行
结论: “this.(形参列表)” 在构造器中最多声明一个
如果一个类中声明了n个构造器, 则最多有n-1个构造器可以声明有"this.(形参列表)"的构造器