天天看點

黑馬程式員-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語句不能用在一般函數中,隻能在構造函數裡使用。