this:代表所在函数所属对象的引用,简单来说哪个对象在调用this所在的函数,this就代表哪个对象。
this应用:
1、用于区*部变量和成员变量同名情况。
2、当定义类中功能时,该函数内部要用到调用该函数的对象时
这时用this来表示这个对象。
当不加this关键字且成员变量和局部变量同名时,则在调用函数传参数时,局部变量会屏蔽成员变量:
class Person
{
private String name;
private int age;
Person(String name,int age)
{
name = name;//局部变量屏蔽了成员变量,未能给成员变量name赋值
age = age;
}
public void show()
{
System.out.println("name="+name+";age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("lisi",20);
p.show();
}
}
输出结果:
name=null;age=0
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;//p对象在调用,所以this指向堆内存中的P对象
this.age = age;
}
public void show()
{
System.out.println("name="+name+";age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("lisi",20);
p.show();
}
}
输出结果:
name=lisi;age=20
当定义类中的功能,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
<pre name="code" class="java">class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean compare(Person p)
{
return this.age == p.age;//this指调用该函数的对象
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p1 = new Person("lisi01",30);
Person p2 = new Person("lisi02",21);
System.out.println(p1.compare(p2));
}
}
this在构造函数间的调用:
class Person
{
private String name;
private int age;
Person(String name)
{
this.name = name;
}
Person(String name,int age)
{
this(name);//等同于于p(name);
this.age=age;
}
public void show()
{
System.out.println("name="+name+";age="+age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("lisi",20);
p.show();
}
}
注意:
1、可以通过this();参数的不同来指定调用哪个构造函数。
2、this语句必须在函数的第一行!确保当初始化操作中还有初始化时,先执行初始化中的初始化操作。
3、this语句不能用在一般函数中,只能在构造函数里使用。