天天看點

黑馬程式員_this關鍵字

---------------------- <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>