为了解决程序中的成员变量和局部变量的名称冲突,在方法中无法访问成员变量。Java中提供了一个关键字this来指代当前对象,用于在方法中访问对象的其他成员。接下来讲解在程序中的三种常见的用法。
1、通过this关键字调用成员变量,解决与局部变量名称冲突问题。class Person{
int age; //成员变量age
Public Person(it age){//局部变量age
this.age=age; //将局部变量age的值赋给成员变量age
}
}
在上面的代码中 ,构造方法的参数被定义为age,它是一个局部变量,在类中还定义了一个成员变量,名称也是age。在构造方法中如果使用“age”,则访问局部变量,但是如果使用“this.age”则是访问成员变量。
2、通过this关键字调用成员方法。class Person{
public void openMouth(){
.
.
.
}
public void speak(){
this.openMouth();
}
}
在上面的speak()方法中,视野this调用了openMouth()方法。注意,此处this可以省略不写。
3、通过this关键字调用构造方法。构造方法是在实例化对象时被Java虚拟机自动调用的,在程序中不能像调用其他方法一样去调用构造方法,但可以在一个构造方法中使用“this([参数1,参数2,......])”的形式来调用其他的构造方法。
package demo;
class Person{
public Person(){
System.out.println("无参的构造方法被调用了...");
}
public Person(int age){
this();//调用无参的构造方法
System.out.println("有参的构造方法被调用了...");
}
}
public class This01 {
public static void main(String[] args){
Person p = new Person(18);//实例化Person对象
}
}
结果:
在使用this调用类的构方法时,应注意以下几点:
1、只能在构造方法中使用this调用其他的构造方法,不能在成员方法中使用; 2、在构造方法中,使用this调用构造方法的语句必须是该方法的第一条执行语句,且只能出现一次;错误示例:程序会报错报错:Constructor call must be the the first statement in a constructor(调用构造函数必须是构造函数总的第一条语句)
3、不能在一个类的两个构造方法中使用this互相调用。错误示范:程序报错:Recursive constructor invocation Person()(递归调用构造函数Person())。



