---------------------- <a href="http://edu.csdn.net" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">.Net教育訓練</a>、期待與您交流! ----------------------
一、成員變量與局部變量同名時
當使用者定義的局部變量與成員變量同名時,使用this關鍵字,this.變量名代表的是成員變量。
class Person
{
int age=0;
Person(int age)
{
this.age= age;
}
}
其中this.age代表的是Person這個類的成員變量,age代表局部變量,如寫成.age= age,程式會報錯。
二、方法内部使用this
this代表它所在函數所屬對象的引用,也就是說那個對象在調用this所在的函數,那麼this就代表哪個對象
class Person
{
private int age;
private String name;
person(String name,int age)
{
this.name = name;
this.age = age;
}
public void setAge(int age)
{
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public boolean equals(Object obj)
{
if(!obj instanceof Person)
throw new RuntimeException("類型錯誤");
Person p = (Person)obj;
return this.age = p.age;
}
}
Person p1 = new Person("張三",28);
Person p2 = new Person("李四",30);
p1.equals(p2);
分析上述代碼,Person類有一個equals方法用于判斷兩個人的年齡是否相同,建立兩個person對象,p1和p2進行比較,當p1使用equals方法時将p2作為比較對象傳遞給equals方法,此時this所屬的equals方法被p1調用,是以此時this代表的就是p1,是以this.age代表的就是p1的年齡即張三的年齡,而p.age代表的就是p2的年齡即李四的年齡。
三、構造函數内部使用this
1,構造函數
随對象的建立而運作,對象一建立對應的構造函數就運作并未對象進行初始化,且構造函數隻運作一次
2,使用格式
this(參數)
class Person
{
private int age;
private String name;
Person()
{
}
person(String name)
{
this.name = name;
}
person(String name,int age)
{
this(name);
this.age = age;
}
}
Person p1 = new Person("zhangsan")
Person p2 = new Person("lisi",30);
當建立p1對象時調用person(String name)這個構造函數給p1對象進行初始化,當建立p2時,調用(String name,int age)這個構造函數,在函數内部使用this(name);調用person(String name)為p2的name進行初始化,初始化結束後執行this.age = age為p2的age進行初始化,最後person(String name,int age)執行完畢,p2初始化結束。
3,構造函數使用this注意事項
31,構造函數之間的調用隻能使用this。
3.2,構造函數使用this時,this語句必須放在構造函數的第一行,因為初始化要先執行。
四、内部類中的this
class Outer
{
private int x = 3;
class Inner
{
private int x = 4;
void function()
{
int x = 5;
System.out.println("x="+x);
System.out.println("tis.x="+this.x);
System.out.println("Outer.this.x="+Outer.this.x);
}
}
}
Outer.Inner in = new Outer().new Inner();
in.function();
列印結果為:x = 5,this.x=4,Outer.this.x=3,是以在内部類存在時使用this時要厘清重名變量的所屬的關系
五、super關鍵字
1,super關鍵字與this關鍵字類似,在繼承中當子父類出現非私有同名成員變量時使用,子類通路父類中的成員時使用super
2,和this一樣super也可用在構造函數中,使用在子類的構造函數中,并且位于構造函數的第一行
3,this和super關鍵字不能同時出現
---------------------- <a href="http://edu.csdn.net" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">.Net教育訓練</a>、期待與您交流! ----------------------
詳細請檢視:<a href="http://edu.csdn.net" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">http://edu.csdn.net</a>