主要内容:
1. 使用this调用成员变量和成员函数
1. 使用this调用成员变量和成员函数
2.使用this调用构造函数
举个例子:
class Person{
String name;
void talk(){
System.out.println("My name is " + name);
}
}
主函数:
class Test2{
public static void main(String args[]){
Person p1 = new Person();
p1.name = "zhangsan";
Person p2 = new Person();
p2.name = "lisi";
p1.talk();
p2.talk();
}
}
运行结果如下:
My name is zhangsan
My name is lisi
疑问:
Java编译器是如何知道对应的name是属于哪个对象的呢?
其实talk函数中的:
System.out.println("My name is " + name)就相当于:
System.out.println("My name is " + this.name)
this就代表:调用这个talk函数的对象。在主函数中p1.talk()中的p1 就是this。在这里this是可以省略的。但是假如talk有参数的话,this就需要按实际情况选择省还是不省了。
class Person{
String name;
void talk(String name){
System.out.println("My name is " + name);
System.out.println("My name is " + this.name);
}
}
主函数:
class Test2{
public static void main(String args[]){
Person p1 = new Person();
p1.name = "zhangsan";
p1.talk("lisi");
}
}
运行结果:
My name is lisi
My name is zhangsan
可以看到省略的话,name就表示传入的参数,加入this.name的话,这个name还是表示这个对象的成员变量。
this的另一个作用:
假如有一个构造函数有三个参数,现在只需要其中两个参数,重新写一个构造函数显得代码冗余,使用this就可以解决:
Person(String name ,int age){
this.name = name;
this.age = age;
}
Person(String name ,int age ,String address){
this(name.age);
this.address = address;
}
这就省略了
this.name = name;
this.age = age;
的代码冗余。
注意:在构造函数中使用this调用本类中别的构造函数时,this必须是第一个语句,不然会报错。在一个构造函数中不能使用多个this调用本类的别的构造函数。