关键字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
——————————————————————————————