再学习Java的时候或者做项目的时候,this和super是绕不开的,今天就详细讲讲this关键字。
1 this 的作用
this:主要用于区分局部变量和成员变量同名的情景。
class Person{
private String name;
private int age;
private Person(String n){
name=n;
}
public void show(){
System.out.println(name+"————"+age);
}
}
class Demo{
public static void main(String[] args){
Person p=new Person("张三");
}
}
输出为:张三----0
我们修改一下
class Person{
private String name;
private int age;
private Person(String name){
name=name;
}
public void show(){
System.out.println(name+":"+age);
}
}
class Demo{
public static void main(String[] args){
Person p=new Person("张三");
}
}
再输出为:null----0
这是为什么呢,因为在name=name这一句中,能在本方法里找到局部变量name,就不会去类中找。而在show中找的name是成员变量name,它没有被赋值。那么如果通过构造方法给类中的name赋值呢,这就用到this了,只需要
private Person(String name){ this.name=name; }
这里this的作用就是将成员变量和局部变量区分开,当然在实际使用中也可以用我的第一种方法,取不同的名字区分来,效果是一样的。但是很多时候取不同的名字容易想不到它的涵义,比如这里用n,就很难联想到它是name。
2 this的应用
1.this调用本类中的属性(类中的成员变量)
正如上面举得例子,构造函数Person有一个形式参数name,在创建对象值传递的时候,需要将实际参数传给私有化的成员变量name。这里就起到区分成员变量和局部变量的作用。
2.this调用本类中的其他方法
这个就很常见,比如
class Person{
private String name;
private int age;
public void show(){
System.out.println(name+":"+age);
}
public void work(String str){
this.show();
System.out.println(str);
}
}
在方法work中调用了show方法。
3.this调用本类中的其他构造函数
比如如下的例子
class Person
{
private String name;
private int age;
Person()
{
System.out.println("person run");
}
Person(String name)
{
this();
this.name =name;
}
Person(String name,int age)
{
this(name);
this.age = age;
}
}
class Demo2
{
public static void main(String[] args)
{
Person p1 = new Person("张三",30);
Person p2 = new Person("李四",36);
}
}
上述写了一个Person对象,并且写了三个不同的构造方法,分别为无参构造函数,形参为name、形参为name和age的构造方法。
在形参为name的构造方法中加了this(name),调用无参的构造方法;在形参为name和age的构造方法中调用参数为name的构造方法。
注意调用其他构造方法一定要放在第一行。因为如果不放在第一行,会编译出错。
总结
我们总结一下this可以解决什么问题,代表的是什么?
this只能作用在同一个类中,代表着本类的对象,代表它所在方法(函数)所属对象的引用。也就是说哪个对象调用this所在的函数,this就代表哪个对象。
在应用的时候,当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了了本类对象,都用this表示。