this关键字
区分同名变量的情况:局部变量和成员变量重名,如下例。
this代表所在函数所属对象的引用,简单说,哪个对象在调用this所在的函数,this就代表哪个对象。
public class Demo{
public static void main(String[] arg){
Person p1 = new Person();
Person p2 = new Person(10);
Person p3 = new Person(10, "name");
}
}
class Person{
private int age;
private String name;
{
this.cry();//构造代码块
}
Person() {//构造函数
System.out.println("A:age = " + this.age + ", name:" + this.name);
}
Person(int age){//构造函数
this.age = age;
System.out.println("B:age = " + this.age + ", name:" + this.name);
}
Person(int age, String name){//构造函数
this.age = age;
this.name = name;
System.out.println("C:age = " + this.age + ", name:" + this.name);
}
void cry(){
System.out.println("cry!");
}
}
this的应用
当定义本类功能(函数)时,该函数内部要调用该函数的对象时,这时用this表示此对象。
/*
C:age = 23, name:lisi
C:age = 10, name:zhangsan
false
*/
public class Demo{
public static void main(String[] arg){
Person p1 = new Person(23, "lisi");
Person p2 = new Person(10, "zhangsan");
System.out.println(p1.compare(p2));
}
}
class Person{
private int age;
private String name;
Person(int age, String name){//构造函数
this.age = age;
this.name = name;
System.out.println("C:age = " + this.age + ", name:" + this.name);
}
public boolean compare(Person p){
return this.age == p.age;
}
}
this语句
仅用于构造函数之间进行互相调用。
this语句只能定义在构造函数的第一行,因为初始化要先执行。
/*
C:age = 23, name:lisi
*/
public class Demo{
public static void main(String[] arg){
Person p1 = new Person(23, "lisi");
}
}
class Person{
private int age;
private String name;
Person(int age){
this.age = age;
}
Person(int age, String name){//构造函数
this(age);
this.name = name;
System.out.println("C:age = " + this.age + ", name:" + this.name);
}
}