天天看点

黑马程序员-this关键字

 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语句不能用在一般函数中,只能在构造函数里使用。