JAVA入門—this指針,懂這個就夠用了!

關鍵字this

  • 是一個系統隱含的指針被自動附加在非靜態的成員函數參數列表中

  • 當前時刻,哪個對象調用該函數,那麼this就指向當前調用該函數的對象,系統會自動在該函數列表中添加一個隱藏的this指針,並且把調用該函數的對象的地址賦值給this指針。

  • 這樣以來,在函數的內部通過this就可訪問當前正在調用該函數的對象的成員。

  • 靜態函數內部,沒有this指針

where is this

class A
{
	public int i;

	public A(int j)
	{
		i = j ;

	}

	public void show()
	{
		System.out.println("i = "+i);
		//相互等價System.out.printf("i = %d\n",this.i);
		//相互等價System.out.printf("i = %d\n",i);
	}
}

class B
{
	public static void main(String[] args)
	{
		A aa1 = new A(5);
		/**
		aa1和aa2在內存中分別有各自的數據成員i,但是aa1和aa2公用show()方法,
		show方法如何知道輸出的i應該是哪個對象中的i?

		實際上每個非static方法中都隱含這一個this指針,
		指向當前正在調用該方法的對象
		 */
		A aa2 = new A(8);
		aa1.show();
		aa2.show();
	}
}

程序運行示例:
——————————————————————————————
i = 5
i = 8
——————————————————————————————

How to do this

  • 設類A中已經有一個數據成員 i

    public int i = 99;
    
  • 倘若我們想在構造函數的形式參數中再次定義一個 i

  • 因爲在實際編程的時候,把構造函數中的形參定義和類中數據成員名字一樣是比較合理的

    	public A(int i)
    	{
    		//我們想把這個形式參數i的值賦值給調用該構造函數的對象的數據成員i
    		//我們該怎麼做?
    		i = i;  <-----這樣子OK?    顯然有些讓人摸不着頭腦
    		
    		這時候this就會派上用場
    		this.i = i;			<------這個語句表達的意思是把形參的值賦值	
    													this指向的對象的數據成員i,因爲this會指向調用該	
    														構造函數的當前對象
    		
    	}
    

程序示例:

class Student
{
	private String name;
	private int age;

	public Student(String name,int age)
	{
		this.name = name;							//	這個“this指針”指向了成員函數作用的對象
		this.age = age;
	}

	public void OUTPUT_H()
	{
		System.out.println("學生姓名:"+this.name+" 學生年齡:"+this.age);
	}
}
class Main
{
	public static void main(String[] args)
	{
		Student A = new Student("xiaocaijiyimei",22);
		A.OUTPUT_H();
	}
}

程序運行示例:
——————————————————————————————
學生姓名:xiaocaijiyimei 學生年齡:22
——————————————————————————————
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章