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語句不能用在一般函數中,只能在構造函數裏使用。